4

我想访问另一个域上的 REST 服务。如果,在 JQuery 中,我指定:

dataType: 'json'

正如预期的那样,它失败了,因为对于跨域调用,必须改用 JSONP。

当我将其更改为:

dataType: 'jsonp'

预计它可以工作,但由于服务器期望JSONP 请求发送application/jsonor application/xmlortext/html等​​而不是,因此失败。*/*

有没有办法强制 JQuery 在执行 JSON 请求时放入application/json请求Accept标头?

4

3 回答 3

5

AFAIK jQuery 的 JSONP 实现使用<script>注入到 DOM 中的标签(因此仅限于 GET 动词),您无法控制其Accept请求内容类型标头。这个标签srcscript只是简单地指向远程域 url。浏览器只是简单地获取发送常规 GET 请求的底层端点。

因此,如果您希望能够为跨域调用设置请求标头,则必须在您的域上设置一个服务器端脚本,将调用委托给远程域(并设置相应的标头),然后将 AJAX 请求发送到你的脚本。

于 2012-07-30T16:30:42.060 回答
0

我想你会想尝试这些方面的东西:

$.ajax({
    headers: { 
        Accept : "application/json; charset=utf-8",
        "Content-Type": "text/plain; charset=utf-8"
    }
    dataType: 'jsonp',
    success : function(response) {
        ...
    }
})
于 2012-07-30T16:32:18.517 回答
0

这可能不适合您的用例,但是当我不得不做跨域 AJAX 时,我通常会在我的域中添加一个额外的资源,然后调用外部资源(通过 cURL 或其他)并返回值到调用客户端。本质上,您正在为 AJAX 调用构建代理。这肯定会增加开销,但您可以通过为此类调用添加缓存层来缓解这种情况。

于 2012-07-30T16:37:35.533 回答