【发布时间】: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