gpt4 book ai didi

javascript - 定义 JSONP 回调函数

转载 作者:行者123 更新时间:2023-11-30 14:50:34 24 4
gpt4 key购买 nike

我对 JS 有点陌生,我的代码有一些问题。

我向服务器发出了 Ajax 请求,我从中获得了响应。由于是跨域请求,我使用的是 JSONP。

$.ajax({
url: "***",
contentType: 'application/javascript',
dataType: "jsonp",
jsonpCallback: "parseResponse"
})
.done(function (response) {
doSomething();
})
.fail(function (error)) {
console.log(error);
}

我得到的响应:

parseResponse({...})

我的问题是理解 parseResponse 回调的工作原理。使用这段代码,我有时会得到

"Uncaught ReferenceError: parseResponse is not defined".

但部分响应通过了 OK(在 .done 函数中,我过滤响应并从那里填充表格)。

应该如何正确定义parseResponse?

编辑:“parseResponse”是 Geoserver 服务设置的默认回调。

响应示例:

parseResponse({"type":"FeatureCollection","totalFeatures":"unknown","features":[],"crs":null})

通常特征属性数组会填充一些数据。

最佳答案

从您的 ajax 中删除 jsonpCallback: "parseResponse"称呼。这让 jQuery 为您处理所有工作。 (它创建一个唯一的函数名称,创建函数,将名称传递给端点,并在完成后清理函数。)

同时删除 contentType: "application/javascript"。您不是服务器发送 JavaScript 代码。

$.ajax({
url: "***", // <== Make sure this DOESN'T have ?callback= on it
dataType: "jsonp"
})
.done(function(response) {
doSomething();
})
.fail(function(error)) {
console.log(error);
});

根据您的评论,目标服务 (Geoserver) 需要一个可笑的选项来指定 JSONP 回调:format_options=callback:name。这根本不能很好地与 ajax 配合使用(而且我以前从未见过对 JSONP 如此迟钝的支持)。

要在不使用硬编码名称的情况下处理它(因为硬编码名称是个坏主意,你不能重叠调用),我们必须玩这样的愚蠢游戏:

var callbackName = "myJSONPCallback" + Date.now() + Math.floor(Math.random() * 100000);
$.ajax({
url: "//the-url?format_options=callback:" + callbackName,
// Include ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// in the URL
dataType: "jsonp",
jsonp: false,
jsonpCallback: callbackName
})
.done(function(response) {
doSomething();
})
.fail(function(error)) {
console.log(error);
});

有关 jsonpjsonpCallback 选项的详细信息,请参阅 ajax 文档(上面链接)。

关于javascript - 定义 JSONP 回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48183943/

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