Dojo XHR根本不向其他服务器发送请求,但一切都在jQuery中运行

时间:2013-06-28 10:41:52

标签: javascript ajax dojo cross-domain

我的开发环境包括用于快速Javascript开发的Apache HTTP服务器和提供JSON REST API的应用服务器(WebSphere)。当然,Access-Control-Allow-Origin设置为(*)。

以下代码导致错误:

 xhr.post({
  url: "http://localhost:8080/rest-sample/rest/test/list",
  handleAs: "json",
  load: onload
 });

 RequestError: Unable to load
 http://localhost:8080/rest-sample/rest/test/list status: 0
 ErrorCtor()create.js (Zeile 13) onError()xhr.js (Zeile 80)     

 var err = Error.call(this, message),

抛出JavaScript错误而不是发送AJAX请求。但是,在同一时间,以下jQuery snipplet功能完美无缺:

    var url = "http://localhost:8080/rest-sample/rest/test/list"
    $.post(url, {}, onLoad, 'json')

我的问题是:我做错了什么?如何使用Dojo将AJAX请求发送到其他服务器?

我正在使用 dojo 1.9

2 个答案:

答案 0 :(得分:1)

我认为不再支持xhr.post,我建议使用dojo / request,或至少dojo / request / xhr

require(["dojo/request/xhr"], function(xhr){
  xhr("http://localhost/rest-sample/rest/test/list", {
    handleAs: "json",
    method: "POST"
  }).then(function(data){
    // Do something with the handled data
  }, function(err){
    // Handle the error condition
  }, function(evt){
    // Handle a progress event from the request if the
    // browser supports XHR2
  });
});

如果是Cross origin问题,我建议在http服务器上使用ReverseProxy。

将此添加到您的httpd.conf

ProxyPass /rest-sample/ http://localhost:8080/rest-sample/

答案 1 :(得分:1)

您的服务器还必须发送Access-Control-Allow-Headers: x-requested-with