【问题标题】:Use returned array from jQuery $.post使用 jQuery $.post 返回的数组
【发布时间】:2015-02-02 00:40:27
【问题描述】:

我有一个简单的代码,可以在 DB 中切换两个值并将它们返回给 jQuery,因此我可以为用户切换它们而无需刷新 apge。

问题是,我将它作为数组返回,console.log 显示数组正常,但我不知道如何从数组中获取数据。

通过 PHP 返回:

$data = array($id, $img1, $img2);
echo json_encode($data);

jQuery:

$.post("bg_images_ajax.php", "switch=yes&id="+id).done(function(data){
    $("#image-left-"+id).attr("src", "/images/backgrounds/"+data[1]).attr("alt", data[1]);
    $("#image-right-"+id).attr("src", "/images/backgrounds/"+data[2]).attr("alt", data[2]);
    console.log(data);
});

data[1] 几乎在我每次使用 Ajax 时都能正常工作,但在这里看起来它将整个返回的数组作为一个简单的字符串(data[2] 返回 6 是数组中的第三个字符 ["6", "blabla", "blablala"] 由 console.log 返回)。

我试图将数组返回为:

["id" = "6", "img1" = "blabla", "img2" = "blalablala"]

并用它来获得我需要的东西:

data.img1

但这只是返回未定义。

我查看了关于 jQuery.post http://api.jquery.com/jquery.post/ 的页面 但我不是瞎就是太累了,因为我看不出我做错了什么。

Ps.:我也尝试过将响应格式放入 jQuery 代码,但没有成功(因为我不太确定到底该放在哪里,尝试了两个地方,如此处所示(不是同时))。

$.post("bg_images_ajax.php", "switch=yes&id="+id, "json").done(function(data){
    $("#image-left-"+id).attr("src", "/images/backgrounds/"+data[1]).attr("alt", data[1]);
    $("#image-right-"+id).attr("src", "/images/backgrounds/"+data[2]).attr("alt", data[2]);
    console.log(data);
}, "json");

【问题讨论】:

  • 遵循@Quentin 的建议,并在您的 PHP 代码顶部添加 header("Content-Type: application/json");。它会起作用的。
  • 我做到了,它可以工作,但我知道 $.post 默认数据类型是 Intelligent Guess 应该知道返回的类型是 JSON。而且我也知道您应该能够更改它,但是在使用 .done(function... 时不知道该将其放置在哪里。我只是想PHP 是 PHP 和 jQuery 按预期工作....
  • 除了提供正确的内容类型是 PHP 的工作。比如hello.php,浏览器没有办法知道是不是普通的HTML格式、XML格式、图片、pdf、zip文件、json等等……有上百万种可能的格式。告诉浏览器浏览器正在查看什么类型的内容是 PHP 的工作。
  • 这是真的,但是当我使用这个jquery.malsup.com/form/#getting-started 你只需在这里设置内容,json_encode 数据在 PHP 中就可以了。所以我希望为 jQuery 设置 JSON 输出会起作用。那么,设置标题的唯一选项是什么?

标签: javascript php jquery arrays ajax


【解决方案1】:

PHP 丢失

header("Content-Type: application/json");

并默认发送text/html

jQuery 将结果视为(无效)HTML 字符串,而不是将 JSON 解析为预期的数据结构。


另外,如果你想要一个对象(具有命名属性)而不是一个数组(通过数字索引访问),那么你必须从 PHP 中的关联数组开始:

$data = array("id" => $id, "img1" => $img1, "img2" => $img2);

【讨论】:

  • 好的,那行得通,但是为什么 json_encode 没有工作呢?我使用这个:jquery.malsup.com/form/#getting-started 进行更长的查询,并且在 PHP 中不需要标头。无论如何,没有那个标题还有其他方法吗?
  • @MiChAeLoKGB — 正如我所说,您向 jQuery 发送了一些 JSON,但告诉它 JSON 确实是 HTML。如果你想让它把它当作 JSON,你必须告诉 jQuery JSON 是 JSON。
  • 好的,那么我在jQuery代码中添加, 'json' 没有效果?对于您的编辑:是的,我在 PHP 中尝试了关联数组。
  • 用我试图告诉 jQuery 响应实际上是 JSON 的代码编辑了我的问题。
猜你喜欢
  • 2011-07-19
  • 1970-01-01
  • 2013-05-01
  • 2011-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多