我有以下代码,其中通过jQuery AJAX方法对服务器进行客户端调用。服务器在JSON中反驳结果。所有操作都很好,但我发现解析数据所需的“替换”有点麻烦和奇怪,如果我不抑制"“和"”字符,代码就根本无法工作。对如何改进它有什么建议吗?
客户端代码:
jQuery.ajax({
type: 'POST',
url: 'ajax/cart_update.php?lang=en',
data: {
'id': id ,
'incr' : increment,
'quantity' : jQuery("#quantity_number" + id).val(),
'final_quantity' : final_quantity,
},
success: function(data){
var data = data.replace("[", "");
data = data.replace("]", "");
if(data != ""){
var obj = jQuery.parseJSON(data);
jQuery("#quantity_number" + id).val(obj.quantity);
jQuery("#total" + id).html(obj.price);
} // if
}
});
服务器(PHP)代码:
... some SQL query...
$value[0]["quantity"] = $row->quantity;
$value[0]["price"] = get_price_product($row->id_product, $row->quantity);
echo json_encode($value);
输出为字符串:{“数量”:"8",“价格”:“1,756.00”}
为什么我要压制"“和"”的角色?
发布于 2016-05-24 06:43:14
实际上,您正在尝试从json响应中获得一个对象。对于jquery中的$.each()
和普通js中的for..in
等迭代器,这是非常容易获得的:
您可以在像$.each()
这样的迭代器中使用这一点:
jQuery.ajax({
type: 'POST',
url: 'ajax/cart_update.php?lang=en',
//datatype: 'json', // <----add this, this can parse the response as json.
data: {
'id': id,
'incr': increment,
'quantity': jQuery("#quantity_number" + id).val(),
'final_quantity': final_quantity,
},
success: function(data) {
if (data != "") {
var resp = jQuery.parseJSON(data); // You don't have datatype, so this is required.
jQuery.each(resp, function(i, obj) {
jQuery("#quantity_number" + id).val(obj.quantity);
jQuery("#total" + id).html(obj.price);
});
} // if
}
});
如果在ajax选项中添加datatype: 'json'
,则不必将json字符串解析为有效的json。datatype
自动地这样做--所以,您不必显式地这样做,就像您正在做的那样。
发布于 2016-05-24 06:39:50
如果您不抑制"“和"”字符并解析响应json,那么它将是一个对象数组。您需要在这个数组上循环,在循环中您可以访问每个对象的属性。当前的代码现在可以工作,因为很可能数组中只有一个项。但是,如果要获得多个项,则当前代码也会中断。
发布于 2016-05-24 06:40:55
您可以循环数组并获得结果。
var obj = jQuery.parseJSON(data);
$.each(obj, function(index, value) {
$("#quantity_number" + id).val(value.quantity);
$("#total" + id).html(value.price);
});
https://stackoverflow.com/questions/37405987
复制相似问题