JSon解析我的代码返回错误

时间:2015-01-08 04:46:48

标签: php json

<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的返回结果是

{"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.php返回

{"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.

3 个答案:

答案 0 :(得分:0)

当您在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

答案 1 :(得分:0)

之后:var obj = JSON.parse(dataFetch);

alert(JSON.stringify(obj));

它可以帮助您纠正您的问题。

答案 2 :(得分:0)

(这个答案基于你的评论,可能有多行。)

我认为这是 always-1 vs 0或更多 vs 1或更多 问题。

你必须决定, 完全 2.php会返回什么?

  1. 总是一排? {"name":"David Tan",...}
  2. 总是一个零行或多行的数组? [{"name":"David Tan",...}, {"name":"Clark Kent",...},...]
  3. 或者只是一行或多行,但不作为数组括起来? {"name":"David Tan",...}{"name":"Clark Kent",...}
  4. 在案例(1)中,dataFetch.name是&#34; David Tan&#34;。

    如果是(2),dataFetch[0].name是&#34; David Tan&#34;。

    在情况(3)中,您的输出无效JSON。如果您能够更改PHP脚本,则将输出更改为Case(2)格式&lt; &lt; GOOD SOLUTION 。如果你必须处理别人的PHP脚本,那么你需要将你的ajax调用更改为dataType: "text",然后清理它以使其成为有效的JSON,然后解析JSON客户端。您 想要省略dataType并让jQuery默认为&#34; Intelligent Guess&#34;,因为结果将根据输出中有多少行而有所不同