dojo / request / xhr在不同的域编写脚本错误上调用Perl Web Service

时间:2014-05-23 19:02:04

标签: json perl dojo cors

我理解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返回。

任何想法?

1 个答案:

答案 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,这意味着它将整个结果包装在一个回调函数中。