使用来自jQuery $ .post的返回数组

时间:2015-02-02 00:40:28

标签: javascript php jquery arrays ajax

我有一个简单的代码,可以在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);
});

数据[1]几乎每次我使用Ajax时都能工作,但是这里看起来它将整个返回的数组作为一个简单的字符串( data [2]返回6 这是控制台.log返回的数组 [“6”,“blabla”,“blalablala”] 中的第三个字符。

我尝试将数组返回为:

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

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

data.img1

但这只是返回undefined。

我查看了有关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");

1 个答案:

答案 0 :(得分:2)

缺少PHP

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

并默认发送text/html

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


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

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