Javascript JSON响应{quot;d";:“128.00";}但显示;128“;
我一直在开发一个购物车,用户可以随意添加/删除订单项目,并使用jQuery$.ajax通过Web服务返回更新的小计 下面是我如何调用Web服务并使用响应设置小计Javascript JSON响应{quot;d";:“128.00";}但显示;128“;,javascript,jquery,ajax,json,Javascript,Jquery,Ajax,Json,我一直在开发一个购物车,用户可以随意添加/删除订单项目,并使用jQuery$.ajax通过Web服务返回更新的小计 下面是我如何调用Web服务并使用响应设置小计 //perform the ajax call $.ajax({ url: p, data: '{' + s + '}', success: function(sTotal) { //order was updated: set span to new sub-total $("#
//perform the ajax call
$.ajax({
url: p,
data: '{' + s + '}',
success: function(sTotal) {
//order was updated: set span to new sub-total
$("#cartRow" + orderID).find(".subTotal").text(sTotal);
},
failure: function() {
//if the orer was not saved
//console.log('Error: Order not deleted');
}
});
我得到的答复似乎很好:
{"d":"128.00"}
当我在页面上显示总计时,它显示为128,而不是128.00
我完全相信这是一件非常简单和愚蠢的事情,但我现在深陷其中,我需要一个有新鲜头脑的人来帮助我
干杯:)
编辑
我还使用$.ajaxSetup设置正确的内容类型:
$.ajaxSetup({
type: "POST",
contentType: "application/json; charset=utf-8",
data: "{}",
dataFilter: function(data) {
var msg;
if (typeof (JSON) !== 'undefined' &&
typeof (JSON.parse) === 'function')
msg = JSON.parse(data);
else
msg = eval('(' + data + ')');
if (msg.hasOwnProperty('d'))
return msg.d;
else
return msg;
}
})) 我看不到此代码中的任何地方可以访问响应的d
属性
//perform the ajax call
$.ajax({
url: p,
data: '{' + s + '}',
success: function(sTotal) {
//order was updated: set span to new sub-total
$("#cartRow" + orderID).find(".subTotal").text(sTotal);
},
failure: function() {
//if the orer was not saved
//console.log('Error: Order not deleted');
}
});
也许你是想这么做
$("#cartRow" + orderID).find(".subTotal").text(sTotal.d);
// --------------------------------------------------^^
编辑
好的,我明白问题所在了。在$.ajax()
调用中,您返回的是JSON,但没有定义数据类型。这意味着jQuery会看到您的应用程序/json
mimetype,并将响应解释为json“128.00”
将是一个字符串
为了保持此功能正常工作,您需要在打印响应之前格式化响应(正如其他人所建议的),或者调整端点以返回有效的JSON字符串
这是我的测试来证明这个解决方案
<div id="test">
Subtotal <span class="subTotal"></span>
</div>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript" charset="utf-8">
google.load("jquery", "1.4.2");
</script>
<script type="text/javascript" charset="utf-8">
$.ajax({
url: 'test.php',
data: {},
success: function(sTotal) {
//order was updated: set span to new sub-total
$("#test").find(".subTotal").text(sTotal);
}
});
</script>
但这可能对您来说并不全面我看不到在这段代码的任何地方可以访问响应的d
属性
//perform the ajax call
$.ajax({
url: p,
data: '{' + s + '}',
success: function(sTotal) {
//order was updated: set span to new sub-total
$("#cartRow" + orderID).find(".subTotal").text(sTotal);
},
failure: function() {
//if the orer was not saved
//console.log('Error: Order not deleted');
}
});
也许你是想这么做
$("#cartRow" + orderID).find(".subTotal").text(sTotal.d);
// --------------------------------------------------^^
编辑
好的,我明白问题所在了。在$.ajax()
调用中,您返回的是JSON,但没有定义数据类型。这意味着jQuery会看到您的应用程序/json
mimetype,并将响应解释为json“128.00”
将是一个字符串
为了保持此功能正常工作,您需要在打印响应之前格式化响应(正如其他人所建议的),或者调整端点以返回有效的JSON字符串
这是我的测试来证明这个解决方案
<div id="test">
Subtotal <span class="subTotal"></span>
</div>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript" charset="utf-8">
google.load("jquery", "1.4.2");
</script>
<script type="text/javascript" charset="utf-8">
$.ajax({
url: 'test.php',
data: {},
success: function(sTotal) {
//order was updated: set span to new sub-total
$("#test").find(".subTotal").text(sTotal);
}
});
</script>
但这可能对您来说并不全面,这是因为该值被视为一个数字,而您希望它被视为一个字符串。 当您使用“。text(sTotal)”,实际上是在包装原语sTotal的Number对象上调用.toString()方法。因为这是一个整数,所以它不带小数。 在调用.text(foo)之前,您需要使用一种将数字格式化为字符串的格式,以便将数字格式化为那样的格式 这将给你两个小数
var a=1/3;
a = a.toString();
switch(a.lastIndexOf(".")){
case -1:
a+=".00";
break;
case a.length-2:
a+="0";
break;
default:
a=a.substring(0, a.indexOf(".") + 3);
}
alert(a);
这是因为该值被视为一个数字,而您希望它被视为一个字符串。 当您使用“。text(sTotal)”,实际上是在包装原语sTotal的Number对象上调用.toString()方法。因为这是一个整数,所以它不带小数。 在调用.text(foo)之前,您需要使用一种将数字格式化为字符串的格式,以便将数字格式化为那样的格式 这将给你两个小数
var a=1/3;
a = a.toString();
switch(a.lastIndexOf(".")){
case -1:
a+=".00";
break;
case a.length-2:
a+="0";
break;
default:
a=a.substring(0, a.indexOf(".") + 3);
}
alert(a);
请试试这个:
$("#cartRow" + orderID).find(".subTotal").text(sTotal.toFixed(2));
HTH请尝试以下操作:
$("#cartRow" + orderID).find(".subTotal").text(sTotal.toFixed(2));
HTH'd'由ASP.NET AJAX用于包装返回值。抱歉,忘了提及我正在使用ASP.NET AJAX!嘿,谢谢你的帮助。我更新了上面的queston,以显示如何使用jQuery.ajaxSetup()设置正确的内容类型。我必须承认,我有点迷路了ASP.NET AJAX使用d'来包装返回值。抱歉,忘了提及我正在使用ASP.NET AJAX!嘿,谢谢你的帮助。我更新了上面的queston,以显示如何使用jQuery.ajaxSetup()设置正确的内容类型。我必须承认,我有点迷路了!你能给我举个例子吗?我假设它不仅仅是:var totalString=msg.toString()$(“#cartRow”+orderID).find(“.subTotal”).text(totalString);这将给你两个小数,你能给我举个例子吗?我假设它不仅仅是:var totalString=msg.toString()$(“#cartRow”+orderID).find(“.subTotal”).text(totalString);这将给你两个小数,这是wierd…我在JSFiddle中尝试过它,它工作得非常好。通过其他事件将值加载到.subTotal时,请检查是否正在执行parseInt或parseFloat。原来是这样!哇,谢谢你,伙计。我们说话的时候,我松了一口气……真是不可思议……我在JSFIDLE中试用过,效果非常好。通过其他事件将值加载到.subTotal时,请检查是否正在执行parseInt或parseFloat。原来是这样!哇,谢谢你,伙计。我们说话时,我松了一口气。。