gpt4 book ai didi

具有静态 JSONP 回调函数的 jQuery "parseerror"

转载 作者:行者123 更新时间:2023-12-01 04:53:47 27 4
gpt4 key购买 nike

好的,使用 jQuery 进行简单的 JSONP 设置,构建时要求我拥有超出搜索词的“静态”URL:

function handleJSONPResponse (data, status, request) {
// update UI
}

$(function () {
$('#some-input').on('keyup', function () {
$.ajax('http://www.example.com/service/', {
dataType : 'jsonp',
jsonpCallback : 'handleJSONPResponse',
data : {
search : $('#some-input').val()
},
complete : function (xhr, status) {
if (status === 'parsererror') {
console.log(xhr.responseText)
}
}
});
});

当用户按下按键时,他们的请求就会被触发。就这个问题而言,“hamme”是否在“hammer”之后返回并不重要,我们只想进行调用(我确实在实际代码中处理了这个问题)。我的问题是这样...有时,特别是在频繁按键的情况下,我没有得到 UI 更新,我收到一个错误,该错误被记录到我的控制台,如下所示:

handleJSONPResponse({"JSON" : "Some Data"})

所以,正如您所看到的,jQuery 的响应文本很好,但它仍然导致解析器错误。我还验证了 JSON 内容没问题。 让我强调一下,有时“hammer”的 JSONP 有效,有时“hammer”的 JSONP 失败。这不是后端错误;而是一个错误。我总是在 xhr.responseText 中得到看起来像有效 JSONP 响应的内容。

我已经尝试将 JSONP 回调处理程序传递到 Ajax 请求的“成功”参数中,但这不会改变操作。为了防止此错误,我唯一能做的就是删除指定的 JSONP 回调名称并让 jQuery 生成随机名称,但我的缓存层要求我必须保持 URL 静态,因此必须保持静态回调名称.

我该怎么做才能确保我不会随机从 jQuery 获得 parsererror 失败?

您可以在此处查看示例:

http://jsfiddle.net/yVqpS/

JSFiddle“Echo”JSONP 产生错误的频率远低于我的本地服务,但如果您仔细研究它,您会通过控制台看到一些“handleJSONPResponse not Defined”错误...

澄清:需要跨域,所以任何不跨域的都不起作用。抱歉,除了使用 JSONP 作为我的标准而不是普通的 Ajax 请求之外,我在第一个示例中没有更清楚地说明这一点。

最佳答案

在这种情况下,使用 $.getScript 可能更容易:

http://jsfiddle.net/yVqpS/1/ (注意它是如何在主体中运行脚本的,而不是 dom load。head 也可以工作。函数必须在全局命名空间中定义。)

function handleJSONPResponse(data, status, request) {
console.log('response', data);
}

$(function(){
$('#some-input').on('keyup', function () {
$.getScript('http://jsfiddle.net/echo/jsonp/?' + $.param({
search: $('#some-input').val()
}) + "&callback=handleJSONPResponse");
});
});

关于具有静态 JSONP 回调函数的 jQuery "parseerror",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16574718/

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