2012-05-24 109 views
1

我買了,當我試圖做一個POST請求使用JSON
這是代碼的頭一個問題:jQuery的阿賈克斯頭問題

$.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"); 
       } 
      }); 

這是由螢火蟲顯示請求頭。

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 

正如你所看到的,標題犯規匹配的那些IM指定,但是當我使用捲曲頭是這樣的人,而不是:

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發送給JSON的Headers的默認值,但沒有奏效。

+0

如果您在beforeSend函數調用中記錄xhrObj,您會在控制檯中獲得什麼?的console.log(xhrObj)。它是否表明這些屬性實際上是設置的? – ariestav

+0

爲什麼你想明確設置「接受」? Firefox的「Accept」頭文件中的*/*表示可以接受任何格式的響應。請參閱鏈接 - http://www.gethifi.com/blog/browser-rest-http-accept-headers –

+0

我想也許你的問題可能是你的服務器配置的方式可能不是正確的標題發送到響應。 – user17753

回答

1

實際上,這是一個跨域問題,我將我的URL定義爲IP,因此瀏覽器將它解釋爲跨域請求。

謝謝你的一切!

1

好像是同源策略問題。使用dataType='jsonp'應該可行,但這可能需要其他更改。

查看https://developer.mozilla.org/en/http_access_control的深入解釋。

+0

感謝您的答案,但服務器不允許GET,所以我需要使用POST這個JSONP不會允許我這樣做。 –

+0

您可以使用代理服務器:http://developer.yahoo.com/javascript/howto-proxy.html – Stefan

+0

我不認爲它的CrossDomain問題,它在同一臺服務器上運行的所有內容。 –