【问题标题】:json parse error - Uncaught TypeError: Cannot use 'in' operator to search for '1009'json 解析错误 - 未捕获的类型错误:无法使用“in”运算符搜索“1009”
【发布时间】:2016-10-28 18:37:09
【问题描述】:

我正在开发一个应用程序,它对返回 json_encode 数据的 PHP 脚本进行 Ajax 调用。

数据正按预期从 PHP 返回。但是当试图在 jquery 中解析它时,我得到了一个控制台错误:

未捕获的类型错误:无法使用“in”运算符搜索“1009”

后面是我的数据数组的副本。

这里是json编码数据的一个例子:

[
{"u_id":"21747","fname":"Andy","lname":"","email":"foo@bar.com"},
{"u_id":"3748","fname":"John","lname":"","email":"foo@baz.com"},      
{"u_id":"451750","fname":"Peter","lname":"","email":"someone@else.com"},
]

我使用的 jquery 如下。所需的输出是在复选框旁边显示人们的电子邮件地址列表:

$(function() {
    $('#myModal').on('shown.bs.modal', function() {
        $(".modal-body").html("Loading...");
            $.ajax({
                url: "<?= $router->pathFor('/admin/ajax/find-user'); ?>",
                data: {
                    searchInput: $('#searchInput').val()
                },
                method: "POST",
          }).done(function(data) {
             //$(".modal-body").html(data);
             $.parseJSON(data);
             $.each(data, function(key, value){
                 $(".modal-body").html('<input type="checkbox" id="' + value.u_id + '">' + value.email + "<br>");
          });
      });
    });
});

这有什么问题,错误是什么意思(我在数据中的任何地方都看不到 1009,虽然不确定这是否是真正的意思?)

【问题讨论】:

  • “为了简洁起见,我只是展示 .done 部分” 过于简洁。 data 是什么?它来自哪里?如果您通过ajax 加载它并使用正确的Content-Type 标头返回它,它可能已被解析为对象数组,但是...
  • 执行console.log(data); 并将您的输出粘贴到问题中。
  • @T.J.Crowder 更新以显示完整的 jquery 正在使用中
  • @divix: 更好的是,与其使用console.log 手电筒在黑暗中磕磕绊绊,不如使用浏览器内置的全功能调试器来打开灯。 :-)
  • $.parseJSON(data); 是在另一位评论者的建议下(如下),正如你所说,这没有任何区别。当我执行console.log(data) 时,它会输出给定的 json 数组 - 没有任何错误。这也是为什么我在那里有//$(".modal-body").html(data); 的原因,这样我就可以检查 PHP 发回的内容,但看起来没问题。

标签: php jquery json


【解决方案1】:

您需要先解析您的 JSON 数据:

var parsedData = $.parseJSON(data);

但是,如果您的 PHP 脚本返回带有正确 Content-Type 的 JSON,则您不需要这样做。如果你确保 PHP 脚本发送了Content-Type: application/json,jQuery 会在给你之前自动解析它。所以这是解决问题的另一种方法。

【讨论】:

  • 可能 jQuery 已经解析了它;太糟糕了,OP没有向我们展示更多的背景信息。
  • 我已经更新它以显示正在使用的完整 jquery 并且还尝试了@Rax 的行,但没有任何区别
  • 这是一个装饰,但你实际上并不需要额外的 var,只需使用 data =
  • @T.J.Crowder 感谢有关 json 标头的建议。我已经在我的 PHP 脚本中对此进行了修改,现在可以在没有 $.parseJSON(data) 的情况下实现它。还要感谢@divx,我删除了多余的var 并且仍然有效。感谢大家的帮助。
【解决方案2】:

不太确定! 但是您可以尝试使用 largeJSONobject.data 喜欢 $.each(largeJSONobject.data, function(key, value){ $(".modal-body").html('' + value.email + "
"); });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    • 2018-08-02
    • 2015-08-22
    • 2013-09-01
    相关资源
    最近更新 更多