gpt4 book ai didi

javascript - AJAX与WCF获取跨域导致parseError

转载 作者:行者123 更新时间:2023-12-02 16:22:05 25 4
gpt4 key购买 nike

我正在尝试使用 $.ajax 从 javascript 使用 WCF Rest 服务,我知道跨域调用存在问题。经过一天多的谷歌搜索,我已经走了很远,但缺少最后一英里。

首先,这是我的客户端代码:

$.ajax({
url: "https://myurl-here/api/test?param1=x&param2=y&callback=?",
type: 'GET',
dataType: 'json',
headers: {
"Authorization": "Basic xxxxxxxxx"
},
success: function(data) {
alert(data);
},
error: function(data, errorThrown) {
alert(errorThrown);
}
});

请注意,我添加了 callback=? 参数并设置了 dataType='json'。我正在使用 Chrome 进行调试,它有一些强大的工具。服务器的响应是200 OK。但是,我收到一条错误消息:

Uncaught SyntaxError: Unexpected token :

在谷歌搜索更多内容后,我认为此错误可能是因为服务器响应设置为内容类型“application/json”,而客户端期望“application/javascript”。以下是调试工具返回的内容:

200 OK

如果我点击此按钮并转到响应选项卡,我什至会看到响应中的纯 json 字符串,这是正确的,正是我想要的。

现在我的问题是:我能做什么?有没有办法告诉ajax我不需要脚本,但它应该只获取内容并将其解析为纯json?或者有没有办法忽略解析错误并随后获取内容? Chrome 调试器工具似乎以某种方式获取了内容。

或者有没有办法完全摆脱这个回调=?我怀疑这会使 contentType 变为 jsonp (我不完全确定这一切是如何工作的)。

我还可以更改服务器端的代码,但是有一些限制:服务器端代码不能托管在 IIS 中,它是一个自托管的 WCF 服务。

最佳答案

您应该尝试使用:

dataType: 'jsonp'

并删除

&callback=?

来自 URL。

更新:

更新

收到响应后,Jquery 尝试验证响应是否包含有效的 JSON。如果响应不是有效的 JSON,您将收到解析错误。

  • 如果您使用 dataType : 'json' 并且响应包含回调(如回调({/* ... */})),则会失败,因为回调不被视为有效的 JSON。
  • 如果您使用 dataType : 'jsonp' jquery 将首先调用回调,然后验证 JSON。

您可以尝试使用jsonlint.com等验证工具来确保返回的JSON有效。如果你想阻止Jquery验证响应,你可以在服务器端将响应内容类型设置为文本。在 clinet 端,并在 jquery AJAX 调用中使用 contentType : 'text' 。在 success 回调中,使用 JavaScript 函数 JSON.parse(text) 将响应文本转换为 JSON。

如果您希望 WCF 服务支持 CORS,您将需要添加 JSONP 支持或 enable CORS 。如果您决定启用 CORS,您将需要 Jquery ajax 设置 crossDomain。

希望对你有帮助!

关于javascript - AJAX与WCF获取跨域导致parseError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29029190/

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