从 form.submit 而非商店读取 PHP 响应中的嵌套 JSON
Reading Nested JSON in a PHP Response from form.submit and NOT a Store
我正在使用 ExtJS 6 构建 Web 应用程序。0.x。一方面,用户可以上传一个 excel 文件,然后我会解析它并将数据保存到后端。
PHP 我要求上传和解析 return 一个嵌套的 JSON 对象,其结构如下所示:
{
"success":false,
"message":"Fail",
"row_error_object_array":[{"data1":"val1","data2":"val2","data3":"val3","data4":"val4","data5":["array"]}],
"overall_error_array":[]
}
根据成功或失败,错误数组可能有也可能没有值。
到目前为止,我能够 return 这种格式从我的 PHP 返回到 ExtJS 框架。通过执行以下操作,我可以获得非数组值、成功和消息:
failure: function (form, action) {
console.log('fail hit!');
var data = Ext.JSON.decode(action.response.responseText);
console.log('action is = ' + action);
var success_ = data.success;
var message_ = data.message;
var row_error_ = data.row_error_object_array;
var overall_error_ = data.overall_error_array;
console.log('succees: ' + success_);
console.log('message: ' + message_);
console.log('row_error: ' + row_error_);
console.log('overall_error: ' + overall_error_);
var row_error_object = Ext.JSON.decode(row_error_);
var overall_error_object = Ext.JSON.decode(overall_error_);
console.log('row_error_object: ' + row_error_object);
console.log('overall_error_object: ' + overall_error_object);
if(row_error_.length > 0){
console.log('row error present!!');
console.log('row error data1 = ' + row_error_.data1);
console.log('row error data2 = ' + row_error_.data2);
console.log('row error data3 = ' + row_error_.data3);
console.log('row error data4 = ' + row_error_.data4);
console.log('row error data5 = ' + row_error_.data5);
}
},
在这种情况下,成功案例不重要,因为错误数组为空。
但是,日志显示这些:
row_error: [object Object]
row error data1 = undefined
row error data2 = undefined
row error data3 = undefined
row error data4 = undefined
row error data5 = undefined
不确定我在这里做错了什么,ExtJS 知道它们是一个对象,但是当我尝试执行 object.property
技巧时,它显示未定义。
如何反序列化来自服务器的嵌套 JSON 响应?或者对此有什么好的解决方法吗?
一个JSON.decode
就够了。你尝试像对象一样使用 row_error_array
- 这是错误的。您可以获得数组中第一个元素的 data
个键:
console.log('row error data1 = ' + row_error_[0].data1);
我正在使用 ExtJS 6 构建 Web 应用程序。0.x。一方面,用户可以上传一个 excel 文件,然后我会解析它并将数据保存到后端。
PHP 我要求上传和解析 return 一个嵌套的 JSON 对象,其结构如下所示:
{
"success":false,
"message":"Fail",
"row_error_object_array":[{"data1":"val1","data2":"val2","data3":"val3","data4":"val4","data5":["array"]}],
"overall_error_array":[]
}
根据成功或失败,错误数组可能有也可能没有值。
到目前为止,我能够 return 这种格式从我的 PHP 返回到 ExtJS 框架。通过执行以下操作,我可以获得非数组值、成功和消息:
failure: function (form, action) {
console.log('fail hit!');
var data = Ext.JSON.decode(action.response.responseText);
console.log('action is = ' + action);
var success_ = data.success;
var message_ = data.message;
var row_error_ = data.row_error_object_array;
var overall_error_ = data.overall_error_array;
console.log('succees: ' + success_);
console.log('message: ' + message_);
console.log('row_error: ' + row_error_);
console.log('overall_error: ' + overall_error_);
var row_error_object = Ext.JSON.decode(row_error_);
var overall_error_object = Ext.JSON.decode(overall_error_);
console.log('row_error_object: ' + row_error_object);
console.log('overall_error_object: ' + overall_error_object);
if(row_error_.length > 0){
console.log('row error present!!');
console.log('row error data1 = ' + row_error_.data1);
console.log('row error data2 = ' + row_error_.data2);
console.log('row error data3 = ' + row_error_.data3);
console.log('row error data4 = ' + row_error_.data4);
console.log('row error data5 = ' + row_error_.data5);
}
},
在这种情况下,成功案例不重要,因为错误数组为空。
但是,日志显示这些:
row_error: [object Object]
row error data1 = undefined
row error data2 = undefined
row error data3 = undefined
row error data4 = undefined
row error data5 = undefined
不确定我在这里做错了什么,ExtJS 知道它们是一个对象,但是当我尝试执行 object.property
技巧时,它显示未定义。
如何反序列化来自服务器的嵌套 JSON 响应?或者对此有什么好的解决方法吗?
一个JSON.decode
就够了。你尝试像对象一样使用 row_error_array
- 这是错误的。您可以获得数组中第一个元素的 data
个键:
console.log('row error data1 = ' + row_error_[0].data1);