【问题标题】:JSON object undefinedJSON 对象未定义
【发布时间】:2012-04-11 11:16:54
【问题描述】:

我有一个 AJAX 页面请求,它使用一个 php 文件来处理对我的 MySQL 数据库的查询。 php 文件工作得很好,但由于某种原因,它对我来说并不好。这是我所拥有的:

    function updateForm(){
        ID = $('#listings').val();
        $.ajax({
            type: "POST",
            url: 'query.php',
            data: "query=true" +
                    "&id=" + ID,
            datatype: 'json',
            success: function(data) {
                alert(data);
                updatePreview();
            }
        });
    }

给我一​​个弹出窗口:

{"results":[{"ID":"12","area":"Hoboken","bedrooms":"5","fullbath":"3","halfbath":"1","remarks":"No remarks to speak of.","sqft":"2500","photos":null,"price":"1000","fee":null,"realtor":"Jane Doe","phone":"555-555-5555","address":"10th & Willow","bix":"1"}]}

但一旦我将其更改为:

    function updateForm(){
        ID = $('#listings').val();
        $.ajax({
            type: "POST",
            url: 'query.php',
            data: "query=true" +
                    "&id=" + ID,
            datatype: 'json',
            success: function(data) {
                alert(data.results);
                updatePreview();
            }
        });
    }

弹出窗口只是说未定义。

最终,我想解析信息并相应地更新我的页面,但我似乎无法访问此 JSON 对象的任何属性。怎么回事?

编辑:

这是来自 php 文件的代码:

if (isset($_POST['query'])){
    if (isset($_POST['id'])){
        $query = 'SELECT * FROM bix WHERE ID=' . get_post('id');
        $listing = mysql_query($query);
        print_json($listing);
    }
}
function print_json($var){
    $output = array();
    while($row = mysql_fetch_assoc($var)) {
        $output["results"][] = $row;
    }
    echo json_encode($output);
}

function get_post($var)
{
    return mysql_real_escape_string($_POST[$var]);
}

【问题讨论】:

  • 你能发布你的服务器端代码吗?
  • 如果你同时使用 console.log() 你会得到什么?
  • 可能你没有将 dataType 中的 T 大写...

标签: jquery mysql ajax json


【解决方案1】:

如果它在警报弹出窗口中显示一个字符串,则表示数据是一个字符串,而不是 JSON。 对于 JSON,它显示 [Object object]。

检查响应类型。它应该是 applicaton/json 或 applicaton/javascript,而不是 text/plain 或类似的东西。

更新:还要确保服务器不返回引号中的整个字符串。例如。 "[..]" - 它只是一个字符串。因此,请使用 FireBug 或 Chrome 开发人员工具来查看实际响应。这可能有助于理解为什么 jQuery 不能正确处理它。

【讨论】:

  • 这很有趣,但是根据 jQuery 文档,数据类型:'json',应该为您完成提升...您可以发布您的服务器端代码吗?
【解决方案2】:

您是否已经尝试在 ajax 调用中将 dataType 中的 T 大写?

【讨论】:

    【解决方案3】:

    您应该改为console.log(data),这样您就可以看到可用于访问数据的密钥。

    【讨论】:

      【解决方案4】:

      我认为它不会以解析后的 json 格式返回。我相信它会以字符串的形式返回...

      使用:

      var x = jQuery.parseJSON(data);
      alert(x.results)
      

      【讨论】:

      • 应该,不过。文档说 datatype: 'json' 返回一个 JSON 对象,而不是字符串。
      • 您是否尝试过在 ajax 调用中将 dataType 中的 T 大写?
      • 啊,这完全是问题所在。
      • 如果你把它写下来作为回复,我会给你打勾!
      • 我添加了一个新的回复。你可以检查一下。很高兴解决了它。
      【解决方案5】:

      尝试使用 data 而不是 data.results 或定位 data.id 或 data.area 看看会产生什么

      【讨论】:

        【解决方案6】:

        正如 Eugene 指出的,数据是一个字符串。尝试评估:

        var stuff = eval(data);
        alert(stuff.results);
        

        编辑:这可行,但 jQuery.parseJSON 可能更酷。

        【讨论】:

          猜你喜欢
          • 2012-03-16
          • 2012-08-26
          • 2011-07-08
          • 2018-06-07
          • 1970-01-01
          • 1970-01-01
          • 2018-02-11
          • 1970-01-01
          • 2018-09-17
          相关资源
          最近更新 更多