进程 JSON 未知格式
Procjess JSON of unknown Formats
a 服务通过 JSON
提供以下信息
{"errors":{"subject":"foobar"}}
以及此错误数组中的其他元素
或
{"ok":{"subject":"foobarfoobar"}}
以及此 ok 数组中的其他元素
所以总是两者中的任何一个都存在,而不是同时存在。任何一个都不存在我总是得到一个访问错误,因为一个属性当然不存在
而且我完全无法处理这个结果。我总是得到 "can not ... of undefined":
我目前有:
if (data[0].hasOwnProperty("status")) {
alert('ddd');
}
如果提供了 errors 或 ok,正确的测试方法是什么?
更新
blex 是对的:但在服务器端使用:
echo json_encode( array('errors' => $result['errors']) );
这是否意味着错误已经是数组的第一个元素?为什么这被视为对象属性?
SOLUTION/LEARNING:
当心PHP!如上所述 echo json_encode( array('errors' => $result['errors']) );
不会将其编码为 JSON 数组。我误解和忽视的是,{
是对象的 Format/Notation 而不是数组。所以要成为一个数组,它必须是 [
。 所以最后 PHP 确实将关联数组编码为普通对象属性而不是数组。那是我错误的假设
var x = { "errors": { "subject": "foobar" } };
//var x = { "ok": { "subject": "foobarfoobar" } };
if (x.errors) {
} else if (x.ok) {
}
基本上,您已经在正确的轨道上了。 hasOwnProperty 是检查这些键是否存在的正确方法。
我不确定你使用的是什么语言,但似乎 json_encode 正在将你的数组转换为单个对象,然后将该对象放在 errors 键下。
最后一件事,您可能应该考虑使用 HTTP 响应代码。如果您可以 return 一个 200 OK 表示好的场景,一个 400 或 500 级别的代码表示您的错误,那么您将能够使用更好的方法来确定如何处理这些情况。 jQuery.ajax 能够放置两个处理程序,例如,一个用于成功,一个用于失败。
a 服务通过 JSON
提供以下信息{"errors":{"subject":"foobar"}}
以及此错误数组中的其他元素
或
{"ok":{"subject":"foobarfoobar"}}
以及此 ok 数组中的其他元素
所以总是两者中的任何一个都存在,而不是同时存在。任何一个都不存在我总是得到一个访问错误,因为一个属性当然不存在
而且我完全无法处理这个结果。我总是得到 "can not ... of undefined":
我目前有:
if (data[0].hasOwnProperty("status")) {
alert('ddd');
}
如果提供了 errors 或 ok,正确的测试方法是什么?
更新
blex 是对的:但在服务器端使用:
echo json_encode( array('errors' => $result['errors']) );
这是否意味着错误已经是数组的第一个元素?为什么这被视为对象属性?
SOLUTION/LEARNING:
当心PHP!如上所述 echo json_encode( array('errors' => $result['errors']) );
不会将其编码为 JSON 数组。我误解和忽视的是,{
是对象的 Format/Notation 而不是数组。所以要成为一个数组,它必须是 [
。 所以最后 PHP 确实将关联数组编码为普通对象属性而不是数组。那是我错误的假设
var x = { "errors": { "subject": "foobar" } };
//var x = { "ok": { "subject": "foobarfoobar" } };
if (x.errors) {
} else if (x.ok) {
}
基本上,您已经在正确的轨道上了。 hasOwnProperty 是检查这些键是否存在的正确方法。
我不确定你使用的是什么语言,但似乎 json_encode 正在将你的数组转换为单个对象,然后将该对象放在 errors 键下。
最后一件事,您可能应该考虑使用 HTTP 响应代码。如果您可以 return 一个 200 OK 表示好的场景,一个 400 或 500 级别的代码表示您的错误,那么您将能够使用更好的方法来确定如何处理这些情况。 jQuery.ajax 能够放置两个处理程序,例如,一个用于成功,一个用于失败。