我想访问另一个域上的REST服务。如果,在JQuery中,我指定:
dataType: 'json'
正如预期的那样失败,因为对于跨域调用,必须使用JSONP。
当我将其更改为:
dataType: 'jsonp'
预计会有效,但会失败,因为服务器需要{J}请求发送的application/json
或application/xml
或text/html
等,而不是*/*
。
有没有办法强制JQuery在执行JSON请求时将application/json
放入Accept
请求标头?
答案 0 :(得分:5)
AFAIK jQuery的JSONP实现使用注入DOM的<script>
标记(因此仅对GET动词的限制),您无法控制Accept
请求内容类型标头。此src
标记的script
只是指向远程域网址。浏览器只是简单地获取发送常规GET请求的基础端点。
因此,如果您希望能够为跨域调用设置请求标头,则必须在您的域上设置服务器端脚本,该脚本将调用委托给远程域(并设置相应的标头),然后发送AJAX请求你的脚本。
答案 1 :(得分:0)
我想你会想要尝试这些方面:
$.ajax({
headers: {
Accept : "application/json; charset=utf-8",
"Content-Type": "text/plain; charset=utf-8"
}
dataType: 'jsonp',
success : function(response) {
...
}
})
答案 2 :(得分:0)
这可能不适合您的用例,但是当我不得不进行跨域AJAX时,我通常只会在我的域中添加一个额外的资源,然后调用外部资源(通过cURL或其他)和将值返回给调用客户端。实质上,您正在为AJAX调用构建代理。它肯定是更多的开销,但您可以通过为此类调用添加缓存层来缓解这种情况。