javascript - jquery $.ajax get 将通过 http 获取文件,但在直接与服务器对话时失败,X-Requested-With 设置不正确?

标签 javascript jquery ajax

我无法让 jquery (1.6.1) 与本地服务器(在同一台机器上)通信,尽管据我所知服务器生成的内容看起来是正确的。

作为测试,我将服务器输出放在一个文件中,然后访问它,它有效:

var url = "http://localhost/web-from-hols/viz/library/test4.json"

$.ajax({
        url: url,
        dataType: "json",
        cache: false,
        type: 'GET',
        error: that.searchError,
        success: that.searchSuccess,
        complete: function(){dom.find('#loadingImg').hide();dom.find('.button').show();searching=false;}
            })

但是...将 url 直接指向本地服务器,但它失败了,状态为 0

var url = "http://127.0.0.1:8080/"+key

嗅探 http header ,我看到以下调用和响应,用于工作...

http://localhost/web-from-hols/viz/library/test4.json?_=1333363765977

GET /web-from-hols/viz/library/test4.json?_=1333363765977 HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:11.0) Gecko/20100101 Firefox/11.0 Accept: application/json, text/javascript, */*; q=0.01 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip, deflate DNT: 1 Connection: keep-alive X-Requested-With: XMLHttpRequest Referer: http://localhost/web-from-hols/viz/viz.html


HTTP/1.1 200 OK Date: Mon, 02 Apr 2012 10:49:25 GMT Server: Apache/2.2.20 (Ubuntu) Last-Modified: Mon, 02 Apr 2012 02:28:15 GMT Etag: "42e020c-137f-4bca8f1467744" Accept-Ranges: bytes Content-Length: 4991 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: application/json

对于不工作的,我看到:

http://127.0.0.1:8080/EP1186609?_=1333370799152

GET /EP1186609?_=1333370799152 HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:11.0) Gecko/20100101 Firefox/11.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive
Referer: http://localhost/web-from-hols/viz/viz.html
Origin: http://localhost


HTTP/1.1 200 OK
Date: Mon, 02 Apr 2012 02:33:43 GMT
Server: Apache/2.2.20 (Ubuntu)
Last-Modified: Mon, 02 Apr 2012 02:28:15 GMT
Etag: "42e020c-137f-4bca8f1467744"
Accept-Ranges: bytes
Content-Length: 4991
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: application/json

我能看到的唯一真正区别是工作请求包括

X-Requested-With: XMLHttpRequest

虽然非工作已添加,但在非工作中缺少:

Origin: http://localhost

我试着用代码添加这个

 $.ajaxSetup({ 
      headers: {"X-Requested-With":"XMLHttpRequest"} 
    }); 

但这似乎没有帮助,而不是添加行

X-Requested-With: XMLHttpRequest

我看到添加了以下内容

Access-Control-Request-Method: GET
Access-Control-Request-Headers: x-requested-with

坦率地说,我不明白发生了什么,我读到 jquery 有时在发出请求时会省略“X-Requested-With: XMLHttpRequest”值,或者它可能是跨站点问题,可能.. :-(

这个问题已经困扰我们两个人一天了,非常感谢任何帮助。

最佳答案

您不能将正常的 AJAX 请求发送到另一个域(即使该域解析到同一台机器)或不同的端口。 Firefox 正在尝试发送 CORS请求,但在您的服务器未返回表示您允许 CORS 请求的 header (例如 Access-Control-Allow-Origin: *)后停止它。

关于javascript - jquery $.ajax get 将通过 http 获取文件,但在直接与服务器对话时失败,X-Requested-With 设置不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9977651/

相关文章:

javascript - Meteor mongodb 数据透视和更优雅的代码

javascript - 我想创建一个带有动态内容的 Bootstrap 弹出窗口

javascript - DataTable bSortable columnDefs 问题

ajax - AJAX 可以传输哪些数据格式?

javascript - AJAX 调用在 IE 11 中不起作用

javascript - EXT JS表单面板中initComponent和onRender的区别

javascript - 尝试使用 % 符号附加输入值

javascript - 折叠展开的 html 表格

jQuery - 等待元素关闭

javascript - Jquery post...没有发布任何内容