我理解Dojo的XHR机制支持CORS,但默认设置X-Requested-With。我只需要设置headers = {“X-Requested-With”:null}
所以我使用 dojo / request / xhr 来调用Perl Web服务(Catalyst Framework)
xhr.get(url, {
handleAs: "json",
headers: {"X-Requested-With": null}
我正在使用Fiddler,这是JSON字符串:
{
"data" : [
{
"structure" : [
{
"name" : "State"
}
],
"dataSource" : [
{
"State" : "CA",
"Id" : 1
}
]
}
]
}
Fiddler返回HTTP结果为200,但我在dojo.then {}
中收到错误"Unable to load http://Server:3000/state/ status: 0"
我也尝试使用 dojo / request / script 来调用Perl Web服务(Catalyst Framework)
script.get(url, {
jsonp: "callback"
}).then(...
但是我得到了脚本错误:
JavaScript critical error at line 2, column 11 in http://Server:3000/state/?callback=dojo_request_script_callbacks.dojo_request_script0\n\nSCRIPT1004: Expected ';'
在“数据”之后突出显示“:”。我不相信这个格式错误的json字符串,因为我的MVC控制器方法可以使用WebClient的DownloadStringTaskAsync调用Perl服务器并将值作为ContentString返回。
任何想法?
答案 0 :(得分:0)
如果您使用的是CORS,则必须做的不仅仅是设置X-Requested-With
标头。您还必须确保服务器发送正确的标头,它必须发送Access-Control-Allow-Origin
标头,可能还有Access-Control-Request-Header
标头,例如:
Access-Control-Allow-Origin: *
Access-Control-Request-Header: x-requested-with
如果你正在使用JSONP,你的web服务必须支持JSONP,这意味着它将整个结果包装在一个回调函数中。