【问题标题】:JSON call returns [object Object] or undefinedJSON 调用返回 [object Object] 或未定义
【发布时间】:2011-08-15 02:51:19
【问题描述】:

非常初级的问题。尝试学习 JSON 并无法获取正确的返回数据。我正在尝试使用 JSON 从使用 json_encode($errs, JSON_FORCE_OBJECT) 的 php 表单中返回错误,但首先我想让下面非常简单的代码能够理解 JSON 对象。

我在这里查看了类似的线程,阅读了整个 JSON.org 文档,查看了 JQuery 的 $.getJSON() 方法并插入了文档中的确切代码,以及 JSON 文档的确切代码,以及除了“未定义”或“[对象,对象]”之外,我似乎仍然无法得到响应。

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <!---CSS-->
    <link href="style/960.css" media="all" rel="stylesheet" type="text/css" />
    <link href="style/pubstyle.css" media="all" rel="stylesheet" type="text/css" />
    <!--- Javascript -->
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js" 
    type="text/javascript"></script>
    <script src="javascripts/form.js" type="text/javascript"></script>
    <script src="javascripts/validate.min.js" type="text/javascript"></script>
    <script src="javascripts/json2.js" type="text/javascript"></script>
    </head>
    <body>
    <script type="text/javascript">
         $(document).ready(function() {
             var resp = {"message":"hi"};
         $("a#button").click(function(resp) {
           alert(resp)
         });
         });

    </script>

    <a id="button" href="#">Button</a>
    </body>
    </html>

上面的代码返回带有“[object Object]”的警报。当我将代码更改为:

    $(document).ready(function() {
             var resp = {"message":"hi"};
         $("a#button").click(function(resp) {
           alert(resp.message)
         });
         });

我收到“未定义”警报。我尝试将它放入一个数组对象

{ "messages": [ {"message":"hi"}]}

并用

resp.messages[0].message

调用它,但没有成功。我尝试将 Content-Type 更改为“application/json”和“text/plain”,但都没有奏效。也试过了

$(document).ready(function() {  
var resp = jQuery.parseJSON('{"message":"hi"}');
$("a#button").click(function(resp) {
alert(resp.message)
});
});

【问题讨论】:

  • 请注意,只有您的最后一个 sn-p 涉及任何 JSON(这是一种文本数据格式 基于 [并以] JavaScript 中的对象和数组表示法命名) .这个问题的大部分是关于 Javascript 语法的对象和数组表示法。
  • (jQuery 作为其 AJAX 机制的一部分,将 JSON 格式的文本反序列化为适当的 Javascript 结构,这无济于事,从而进一步模糊了这两个概念之间明显的“界限”。)
  • 不要使用alert进行调试,而是使用调试器。如果警报显示"[object Object]"(这是字符串由Object.toString 返回),像Firebug 这样的适当调试器将允许您查看对象的实际结构。

标签: javascript jquery json parsing


【解决方案1】:

您在这里混淆了几个不同的元素。

简单示例,基于您问题中的最后一个代码块:

$(document).ready(function() {  
    var resp = $.parseJSON('{"message":"hi"}');
    $('#button').click(function(event) {
        alert(resp.message);
    });
});

您的此代码版本不起作用,因为click 回调函数接收点击事件对象作为其参数。回调中的 resp 参数名称隐藏了 resp 变量。

【讨论】:

  • +1:这是正确答案。 resp 不是 OP 认为的那样。
  • 这是正确的,只是想添加一件事,我认为它可以提供帮助。如果你想看看你在警告什么,你可以使用console.log()和console.dir(),并在chrome控制台、firebug等中查看结果。
  • @Nico 同意了。我刚刚在 OP 上发表了类似的评论。
  • 感谢您快速准确的回复。我在想需要声明变量,然后传递给函数,比如 PHP。所以(function(resp){ alert(resp.message); }); 类似于public function find_by_id($id=$userid) { "SELECT * FROM table WHERE id ==".$id; }。你能告诉我在哪里可以了解更多关于事件对象、JSON 对象和其他 JS 对象的知识吗?您提供的代码也适用于模棱两可的click(function() {,所以我很困惑到底需要将哪些对象传递给函数才能在这些函数中访问。
  • @Matt Ball 谢谢,在我提交下一个问题之前,我一定会阅读指南。我已经让同一页面中的 json 对象工作,现在尝试使用 JQuery 表单和验证插件的表单。尚未在我的成功回调中使用 JSON 对象。当 ajaxSubmit 中的唯一选项是 success: myCallbackFcn, 时,一切正常。当我添加dataType: 'json', 选项时,一条记录会插入到 MySQL 数据库中,但没有客户端响应。处理提交的 PHP 文件有 &lt;meta http-equiv="Content-Type" content="application/json; charset=UTF-8" /&gt; 有什么建议吗?
猜你喜欢
  • 1970-01-01
  • 2015-08-18
  • 2021-09-14
  • 1970-01-01
  • 2020-04-04
  • 2012-07-25
  • 2021-10-25
  • 1970-01-01
  • 2018-06-20
相关资源
最近更新 更多