【问题标题】:Getting JSON encoded variables from php从 php 获取 JSON 编码的变量
【发布时间】:2011-03-28 04:33:14
【问题描述】:

我有这个 php 代码:

$query = mysql_query("SELECT * FROM table WHERE id=$id");
while($item = mysql_fetch_assoc($query)){
    $dataArray['var1'] = $item['var1'];
    $dataArray['var2'] = $item['var2'];
    $dataArray['var3'] = $item['var3'];
    array_push($return_arr,$dataArray);
}

echo json_encode($return_arr);

在我的ajax.php 文件中

然后我使用 jquery 通过 ajax 请求发送 id:

$.ajax({
    type: "POST",
    url: 'ajax.php',
    data: 'id='+id,
    success: function(data) { 
        alert(data);
    }
 });

它提醒我:[{"var1":"somevarhere","var2":"somevarhere2","var3":"somevarhere3"}]

谁能告诉我如何访问前任。 var3 得到somevarhere3

谢谢

【问题讨论】:

  • 那么您的问题是如何将 json 编码的字符串转换为对象?

标签: php javascript jquery ajax json


【解决方案1】:

根据jQuery.ajax 的文档,它作为第一个参数接收的数据根据​​传递给jQuery.AjaxdataType 选项的值进行解释。

如果您为该参数传递'json' 怎么办?
像这样:

$.ajax({
    type: "POST",
    url: 'ajax.php',
    data: 'id='+id,
    dataType: 'json', 
    success: function(data) { 
        alert(data);
    }
 });

这样做,jQuery.ajax 应该将从服务器返回的数据解释为 JSON。


否则,文档说,如果没有指定数据类型 (quoting)

jQuery 将尝试根据 响应的 MIME 类型

因此,另一种解决方案是从 PHP 代码返回一些 JSON 内容类型(请参阅The right JSON content type?,如下所示:

header('Content-type: application/json');

在回显之前。

同样,jQuery.ajax 应该将从服务器返回的数据解释为 JSON。

【讨论】:

  • 我已经添加了dataType: 'json', - 这看起来几乎很棒,现在它说data 是对象但是当我alert(data.toSource()) 它仍然返回[{"var1":"somevarhere","var2":"somevarhere2","var3":"somevarhere3"}],因此它不起作用。它认为这是因为那些括号([])
  • 好吧,既然您的数据被解释为 JSON,您可以像任何其他包含一个对象的 Javascript 数组一样访问它;例如:data[0].var3
【解决方案2】:

好的,我找到了解决方案。感谢Pascal MARTIN,我有了解析结果的想法,所以我使用了这个:

data = data.substring(1,data.length-1);
data = $.parseJSON(data);
alert(data.var3);

第一行删除[], 第二行将 JSON 解析为 Object, 第三行访问该属性

【讨论】:

  • 好吧,如果你的 SQL 查询总是返回一个,而且只返回一个结果,你最好从 PHP 返回一个对象,而不是一个包含一个对象的数组——这就是为什么那些 @ 987654323@ are there : 你的 PHP 代码返回一个 JSON 编码的数组。
【解决方案3】:

应该可以像这样访问它:

data[0].var3

其中 0 是您要访问的数组中项目的索引。

【讨论】:

    猜你喜欢
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    • 2021-12-31
    相关资源
    最近更新 更多