當我有這樣的代碼無法設置內容類型爲「應用/ JSON」在jQuery.ajax
$.ajax({
type: 'POST',
//contentType: "application/json",
url: 'http://localhost:16329/Hello',
data: { name: 'norm' },
dataType: 'json'
});
在菲德勒我可以看到下面的原始請求
POST http://localhost:16329/Hello HTTP/1.1
Host: localhost:16329
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://localhost:14693/WebSite1/index.html
Content-Length: 9
Origin: http://localhost:14693
Pragma: no-cache
Cache-Control: no-cache
name=norm
但我什麼試圖將application/x-www-form-urlencoded設置爲application/json。但是這個代碼
$.ajax({
type: "POST",
contentType: "application/json",
url: 'http://localhost:16329/Hello',
data: { name: 'norm' },
dataType: "json"
});
生成奇怪的要求(我可以看到提琴手)
OPTIONS http://localhost:16329/Hello HTTP/1.1
Host: localhost:16329
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Origin: http://localhost:14693
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Pragma: no-cache
Cache-Control: no-cache
這是爲什麼?什麼是OPTIONS當它應該在那裏?我的內容類型設置爲application/json的位置在哪裏?由於某種原因,請求參數已經消失。
更新1
在服務器端我有很簡單的RESTful服務。
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class RestfulService : IRestfulService
{
[WebInvoke(
Method = "POST",
UriTemplate = "Hello",
ResponseFormat = WebMessageFormat.Json)]
public string HelloWorld(string name)
{
return "hello, " + name;
}
}
但由於某種原因,我不能用參數調用此方法。
更新2
對不起,不回答這麼久。
我已經添加了這些頭到我的服務器響應
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type
Access-Control-Allow-Methods: POST, GET, OPTIONS
它並沒有幫助,我有不允許的方法從服務器錯誤。
這裏是我的小提琴手說
所以,現在我可以肯定,我的服務器接受POST,GET,OPTIONS(如果響應頭工作像我期望的那樣)。但爲什麼「方法不允許」?
在從服務器的WebView響應(你可以看到上面的圖片生響應)看起來像這樣
你應該嘗試JSON.stringfy()方法 – 2012-03-18 12:32:38
NOP,沒有幫助這裏 – 2012-03-18 14:15:20
看。這對我很好:http://stackoverflow.com/questions/9754767/cannot-set-content-type-to-application-json-in-jquery-ajax/18740041#18740041 – Fanda 2013-09-11 11:36:03