XMLHttpRequest对象回调不会在跨域jquery / Ajax请求中触发

时间:2014-03-07 18:07:20

标签: javascript jquery ajax xmlhttprequest

所以我有这段代码:

$.ajax({
    xhr: function() {
        var xhr = new window.XMLHttpRequest();

       xhr.addEventListener("progress", function(evt) {
           if (evt.lengthComputable) {
               var percentComplete = evt.loaded / evt.total;
               console.log(percentComplete);
           }
       }, false);

       return xhr;
    },
  dataType: "jsonp",
  contentType: "text/javascript charset-utf-8",
  url: "http://*******.com/pcm/datamobile.asmx/ObtenerContactos",
  crossDomain: true, 
  timeout:8000000,
  data: {sessionId: 1},
  error : function (xhr, status) {

      },
 success : function() {FirstAjaxReady();} 
});   
}

xhr:选项中的函数永远不会触发。我正在尝试获取有关请求的进度报告。这可能与跨域这一事实有关。如果是这样,有没有办法在跨域Ajax请求中获得进度报告?

1 个答案:

答案 0 :(得分:1)

还需要在服务器端启用Crossdomain或Cross-Origin

http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing

CORS安全确实似乎要求不会发送进展:

  

CORS API规范还需要确保不泄露任何内容   直到跨源请求状态设置为预检完成或   成功防止例如端口扫描。

     

在XMLHttpRequest中,仅在调度后调度进度事件   跨源请求状态设置为成功。上传进度事件   仅在跨源请求状态为预检时才被调度   完整。

如果我正确地阅读。

http://www.w3.org/TR/cors/#preflight-request