JSon 解析我的代码 return 错误
JSon parse return error on my code
<script type="text/javascript">
$(document).ready(function(){
var obj = "";
var param = [{ "name": "id", value: 9}];
$.ajax({
type: 'POST',
url: '2.php',
data: param,
success: function(dataFetch) {
var obj = JSON.parse(dataFetch);
alert(obj[0].name);
},
dataType: 'json',
async:false
});
});
</script>
以上是我的代码。 2.php 的 return 结果是
{"name":"Halford Tee","type":"client","mobile":"1234567","location":"","description":""}
它给我一个 error
Uncaught SyntaxError: Unexpected end of input
当我删除这部分时
var obj = JSON.parse(dataFetch);
alert(obj[0].name);
错误消失了。我的代码有什么问题吗?
在查看了其他程序员的宝贵指南后
我的2.phpreturns
{"name":"David Tan","type":"leads","mobile":"91234567","location":"","description":""}
我尝试了以下方法
$(document).ready(function(){
var obj = "";
var param = [{ "name": "eventId", value: 9}];
$.ajax({
type: 'POST',
url: '2.php',
data: param,
success: function(dataFetch) {
alert(dataFetch[0].name);
},
dataType: 'json',
async:false
});
});
它给我一个错误
cannot read property 'name' of undefined.
当您在 ajax 中使用 dataType: 'json'
时,您不需要使用 JSON.parse.
,您的数据将在 json format
中自动解析,因此您可以直接使用它。
use : `alert(dataFetch.name);`// you do not have any array so directly use it.your data is an object not array of object.
注意:我认为你应该使用async:false
只有当你的调用必须在你的函数中的下一个语句被调用之前完成时。
之后:var obj = JSON.parse(dataFetch);
alert(JSON.stringify(obj));
它可能会帮助您解决问题。
(此答案基于您认为可能不止一行的评论。)
我认为这是其中之一 always-1 vs 0-or-更多 vs 1 个或更多 个问题。
你必须决定,究竟 2.php return 是什么?
- 总是单行?
{"name":"David Tan",...}
- 总是零行或多行的数组?
[{"name":"David Tan",...}, {"name":"Clark Kent",...},...]
- 或者只是一行或多行,但不作为数组括起来?
{"name":"David Tan",...}{"name":"Clark Kent",...}
在情况(1)中,dataFetch.name
是"David Tan"。
在情况(2)中,dataFetch[0].name
是"David Tan"。
在情况 (3) 中,您的输出无效 JSON。如果您有能力更改 PHP 脚本,则将输出更改为案例 (2) 格式 <<GOOD SOLUTION。如果你必须处理别人的 PHP 脚本,那么你需要将你的 ajax 调用更改为 dataType: "text"
,然后清理它以使其有效 JSON,然后解析JSON 客户端。您 不想 省略数据类型并将 jQuery 默认为 "Intelligent Guess",因为结果会因数量而异输出中有行。
<script type="text/javascript">
$(document).ready(function(){
var obj = "";
var param = [{ "name": "id", value: 9}];
$.ajax({
type: 'POST',
url: '2.php',
data: param,
success: function(dataFetch) {
var obj = JSON.parse(dataFetch);
alert(obj[0].name);
},
dataType: 'json',
async:false
});
});
</script>
以上是我的代码。 2.php 的 return 结果是
{"name":"Halford Tee","type":"client","mobile":"1234567","location":"","description":""}
它给我一个 error
Uncaught SyntaxError: Unexpected end of input
当我删除这部分时
var obj = JSON.parse(dataFetch);
alert(obj[0].name);
错误消失了。我的代码有什么问题吗?
在查看了其他程序员的宝贵指南后
我的2.phpreturns
{"name":"David Tan","type":"leads","mobile":"91234567","location":"","description":""}
我尝试了以下方法
$(document).ready(function(){
var obj = "";
var param = [{ "name": "eventId", value: 9}];
$.ajax({
type: 'POST',
url: '2.php',
data: param,
success: function(dataFetch) {
alert(dataFetch[0].name);
},
dataType: 'json',
async:false
});
});
它给我一个错误
cannot read property 'name' of undefined.
当您在 ajax 中使用 dataType: 'json'
时,您不需要使用 JSON.parse.
,您的数据将在 json format
中自动解析,因此您可以直接使用它。
use : `alert(dataFetch.name);`// you do not have any array so directly use it.your data is an object not array of object.
注意:我认为你应该使用async:false
只有当你的调用必须在你的函数中的下一个语句被调用之前完成时。
之后:var obj = JSON.parse(dataFetch);
alert(JSON.stringify(obj));
它可能会帮助您解决问题。
(此答案基于您认为可能不止一行的评论。)
我认为这是其中之一 always-1 vs 0-or-更多 vs 1 个或更多 个问题。
你必须决定,究竟 2.php return 是什么?
- 总是单行?
{"name":"David Tan",...}
- 总是零行或多行的数组?
[{"name":"David Tan",...}, {"name":"Clark Kent",...},...]
- 或者只是一行或多行,但不作为数组括起来?
{"name":"David Tan",...}{"name":"Clark Kent",...}
在情况(1)中,dataFetch.name
是"David Tan"。
在情况(2)中,dataFetch[0].name
是"David Tan"。
在情况 (3) 中,您的输出无效 JSON。如果您有能力更改 PHP 脚本,则将输出更改为案例 (2) 格式 <<GOOD SOLUTION。如果你必须处理别人的 PHP 脚本,那么你需要将你的 ajax 调用更改为 dataType: "text"
,然后清理它以使其有效 JSON,然后解析JSON 客户端。您 不想 省略数据类型并将 jQuery 默认为 "Intelligent Guess",因为结果会因数量而异输出中有行。