【问题标题】:JSon parse return error on my code我的代码上的 JSon 解析返回错误
【发布时间】:2015-03-06 03:42:05
【问题描述】:
<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.

【问题讨论】:

  • dataType: 'json' 将使 jQuery 自动解析响应。如果你只使用alert(dataFetch[0].name);会发生什么?
  • @FelixKling 我更新了我的问题,谢谢
  • 使用 console.log(dataFetch);看看你得到了什么。
  • 2.php返回的json字符串没有数组。试试alert(dataFetch.name);
  • 对象 {name: "David Tan", type: "leads", mobile: "91234567", location: "", description: ""}

标签: php json


【解决方案1】:

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

【讨论】:

  • 我更新了我的问题,但问题似乎仍然存在。是的,它必须在调用下一条语句之前完成。
【解决方案2】:

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

alert(JSON.stringify(obj));

它可能会帮助您纠正您的问题。

【讨论】:

  • 执行警报后,您将找到与您正在使用的 json 相关的键和值。
【解决方案3】:

(此答案基于您可能不止一行的评论。)

我认为这是 always-1 vs 0-or-more vs 之一>1 个或多个 个问题。

您必须决定,究竟 2.php 返回什么?

  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 客户端。您想要省略 dataType 并让 jQuery 默认为“智能猜测”,因为结果会根据输出中的行数而有所不同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-26
    • 2014-09-02
    • 2014-07-31
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 2019-02-22
    相关资源
    最近更新 更多