【问题标题】:JQuery-Ajax headers issueJQuery-Ajax 标头问题
【发布时间】:2012-05-31 10:34:30
【问题描述】:

当我尝试使用 JSON 进行 POST 请求时,标题出现问题
这是代码:

$.ajax({
                type: "POST",
                url: url,
                data: jsonData,
                dataType: 'json',
                beforeSend: function(xhrObj){
                    xhrObj.setRequestHeader("Content-Type","application/json");
                    xhrObj.setRequestHeader("Accept","application/json");
                },
                error: function(){
                    alert("Fail");
                },
                success: function(){
                    alert("Success");
                }
            });

这是 Firebug 显示的请求标头。

OPTIONS /path HTTP/1.1
Host: 192.168.15.109:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0 FirePHP/0.7.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive
Origin: http://localhost
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
x-insight: activate
Pragma: no-cache
Cache-Control: no-cache

以及响应标头:

HTTP/1.1 204 No Content
Date: Thu, 24 May 2012 19:17:01 GMT
Allow: OPTIONS,POST

如您所见,标题与我指定的标题不匹配,但是当我使用 CURL 时,标题是这些标题:

POST /path HTTP/1.1
User-Agent: curl/7.25.0 (i386-pc-win32) libcurl/7.25.0 OpenSSL/0.9.8u zlib/1.2

Host: localhost:8080
Accept: */*
Content-Type: application/json
Content-Length: 5

对此有何想法或解决方案?

我还修改了 JQuery Source 以将 Ajax 发送的 Headers 的默认值设置为 JSON,但没有工作。

【问题讨论】:

  • 如果您在 beforeSend 函数调用中记录 xhrObj,您会在控制台中得到什么?控制台.log(xhrObj)。它是否表明这些属性已被实际设置?
  • 为什么要明确设置“接受”? Firefox 的“Accept”标头中的*/* 表示它可以接受任何格式的响应。参考链接 - gethifi.com/blog/browser-rest-http-accept-headers
  • 我认为您的问题可能是您的服务器配置方式可能没有向响应发出正确的标头。
  • @ariestav 我得到了 4 个空变量和 xhrObj 允许的函数。
  • @user1169578 但是为什么它不发出正确的标题呢? CURL 和 JavaClient 完美运行。并且不能成为跨域问题,因为所有内容都在同一台服务器上。

标签: ajax json jquery http-headers


【解决方案1】:

似乎是一个同源策略问题。使用 dataType='jsonp' 应该可以,但这可能需要进行其他更改。

请参阅https://developer.mozilla.org/en/http_access_control 了解详细说明。

【讨论】:

  • 感谢您的回答,但服务器不允许 GET,因此我需要为此使用 POST,JSONP 不允许我这样做。
  • 我不认为这是一个跨域问题,一切都在同一台服务器上运行。
【解决方案2】:

其实是跨域问题,我把我的URL定义为IP,所以浏览器把它解释为跨域请求。

感谢一切!

【讨论】:

    猜你喜欢
    • 2012-01-22
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 2020-02-17
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 2011-02-11
    相关资源
    最近更新 更多