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 是什么?

  1. 总是单行? {"name":"David Tan",...}
  2. 总是零行或多行的数组? [{"name":"David Tan",...}, {"name":"Clark Kent",...},...]
  3. 或者只是一行或多行,但不作为数组括起来? {"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",因为结果会因数量而异输出中有行。