【发布时间】:2012-05-15 13:57:13
【问题描述】:
我无法弄清楚如何从 jQuery $.post() 请求中正确读取我的 JSON 响应。
在下面的 jQuery 代码中,我根据我用作键的相应“color_entry_id”从 DOM 中的元素填充字符串的关联数组:
var image_links = {};
$(this).find('input[name="color_id"]').each(function() {
var color_entry_id = $(this).val();
var image_link = $(this).parent().find('input[name="edit_image"].' + color_entry_id).val();
image_links[color_entry_id] = image_link;
});
然后我发出 POST 请求,发送我的“image_links”数组:
$.post(
"test.php",
{ id: product_id, "images[]": jQuery.makeArray(image_links) },
function(data) {
var response = jQuery.parseJSON(data);
$.each(response.images, function(index, item) {
alert(item);
});
}
);
另外,如上所示,我尝试遍历响应数组并输出每个项目,我想将其作为字符串,但我只得到“[object Object]”作为警报值。我不知道如何让它显示我要显示的字符串!
这里是 test.php 的 PHP 代码:
<?php
$product_id = $_POST['id'];
$images = $_POST['images'];
$response = array();
$response['id'] = $product_id;
$response['images'] = $images;
echo json_encode($response);
?>
这是 DOM 的相关部分的样子:
<input type='hidden' value='{{ color_entry_id }}' name='color_id' />
<p><img src='{{ color_img_link }}' /></p>
<p>Image Link: <input class='{{ color_entry_id }}' name='edit_image' type='text' size='150' value='{{ color_img_link }}' /></p>
<div class='colors {{ color_entry_id }}'>
<div class='img_color'>
<a href='javascript:void' style='background:...' class='selected'></a>
<p>...</p>
</div>
</div>
我想知道我是否在 PHP 端错误地执行了 JSON 编码,或者我只是在 jQuery 中错误地循环了响应。非常感谢任何帮助!
【问题讨论】:
-
您希望
makeArray对您的image_links对象做什么?使用console.log进行调试会让你有更好的运气,alert在字符串化时会弄得一团糟。 -
嗯,这就是我之前在另一个运行良好的应用程序中使用的。我不应该使用它吗?
-
但是你为什么使用
makeArray?你希望$.makeArray({a: 'b', c: 'd'})做什么?服务器期望在$_POST['images']中找到什么? -
你说得对,我实际上传递了另一个值,类似于 "1": {blue, green, red} 我正在使用 $.makeArray() 。但我不应该将它用于图像。当我摆脱 makeArray 时,它返回 {“1”:“image_link”},但我仍然不知道如何从中获取“image_link”。当我尝试 response.images.1 时,它不起作用。
-
当你在控制台中运行 $(this).find('input[name=color_id]') ..你返回什么吗?当我尝试这样的事情时..它不会拾取输入元素。