【发布时间】:2015-12-20 16:25:08
【问题描述】:
有什么原因导致无法在服务器上评估 json 字符串 (transport.responseText.evalJSON();) 但在我的本地安装上有效?
我正在做一个像这样的简单 ajax 请求:
new Ajax.Request(
this.saveUrl, {
method: 'post',
parameters: Form.serialize(this.form),
onLoading: function () {
totals.update('<div class="loading-ajax"> </div>');
},
onSuccess: function (transport) {
if (transport.status == 200) {
var data = transport.responseText.evalJSON();
totals.update(data.shipping_method);
}
},
onFailure: checkout.ajaxFailure.bind(checkout)
}
);
在服务器端,我输出一个包含一些 html 的数组:
$data = array(
'shipping_method' => $shipping_method,
'payment_method' => $payment_method
);
echo json_encode($data);
我尝试将 $total 和 '$other' 设为空字符串 '',但我得到了相同的结果:
transport.responseText.evalJSON(); 返回 "unexpected token"
如上所述,奇怪的是在我的本地它可以工作(输出与服务器相同但js不会触发任何错误)
我几乎整天都在为此苦苦挣扎……任何帮助都非常感谢,谢谢
更新:
console.log(transport.responseText)
-> {"shipping_method":"","payment_method":""}
在 chrome 中检查服务器响应“网络选项卡”,与我的本地相比,我可以看到一个小的差异:如果我将鼠标移到响应内容之前,则在响应内容之前有一个小的 red dot(比如说\ufeff它,我不确定是什么意思……)
【问题讨论】:
-
执行 JSON.parse(transport.responseText) 时会发生什么?你能显示console.log(transport.responseText)的输出吗
-
您是否尝试过“元素检查器”上的“网络”选项卡,在您最喜欢的浏览器上可用?
-
您可以尝试使用 jQuery.parseJSON 代替 evalJSON。它是我倾向于使用的,但不确定你的实际错误是什么
-
如果输出相同且 Javascript 代码相同 - 那么它可以工作。你做了一些错误的假设。
-
en.m.wikipedia.org/wiki/Byte_order_mark 所以你的一台 php 服务器可能有 mbstring 扩展名,而另一台没有。
标签: javascript php json