gpt4 book ai didi

javascript - 使用 Prototype 解析 JSON 结果时出现问题

转载 作者:行者123 更新时间:2023-11-28 02:59:34 26 4
gpt4 key购买 nike

我的服务返回以下 JSON 对象,其中 Content-Type header 设置为“application/javascript”。它按照 json.org 上的说明用括号括起来] 2 ,但我尝试过带或不带括号。没有括号,它通过 jsonlint 的验证.

({
"products": {
"itemId": "0",
"productId": "1234",
"quantity": "4",
"rank": "12",
"subProductId": ""
},
"txnId": "1"
})

如果我明确评估响应,如下所示,我没有问题:

var form = $('productListRequestForm');
form.request({
onSuccess: function(response) {
var json = eval(response.responseText);
rebuildWishlistTable(json);
},
onFailure: function(response) {
alert("AJAX request failed: " + response.responseText);
}
});

但是,如果我依赖 Prototype 解析响应并将解析结果作为第二个参数传递给我的函数,如下所示,该值始终为 null。根据Prototype docs ,这应该有效。是否有我遗漏的东西,或者他们遗漏的东西?

var form = $('productListRequestForm');
form.request({
onSuccess: function(response, json) {
rebuildWishlistTable(json);
},
onFailure: function(response) {
alert("AJAX request failed: " + response.responseText);
}
});

最佳答案

它看起来像是 Prototype 中的一个错误。

在修订版 1.6.1 的第 1497 行,有以下代码:

  var contentType = response.getHeader('Content-type');
if (this.options.evalJS == 'force'
|| (this.options.evalJS && this.isSameOrigin() && contentType
&& contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
this.evalResponse();

请注意,evalResponse() 的返回没有执行任何操作。如果我们然后去定义该函数:

  evalResponse: function() {
try {
return eval((this.transport.responseText || '').unfilterJSON());
} catch (e) {
this.dispatchException(e);
}
},
<小时/>

在 Prototype 网站上发布了一个错误,并以我对 JSON 有“几个误解”的评论关闭,并且不应该使用错误报告系统来获取帮助。有趣的是,我以为我是在指出他们在哪里丢弃了返回值。

如果其他人可能遇到类似的情况,我正在编辑我的问题以显示有效和无效的代码,并将接受此答案。

关于javascript - 使用 Prototype 解析 JSON 结果时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1473372/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com