2013-11-03 194 views
1

我有一個API。我試圖用Ajax Jquery發送一個請求到我的API,但有問題。以下是我的Ajax請求。我以JSON格式發送數據,另外我需要添加兩個請求標頭(signedInUserId & accessToken)。但是這不起作用。添加自定義請求標頭

$.ajax({ 
         type: "PUT", 
         contentType: 'application/json', 
         dataType: 'json', 
         beforeSend: function(xhr) { 
          xhr.setRequestHeader("signedInUserId", "1"); 
          xhr.setRequestHeader("accessToken", "testtoken"); 
          }, 
         url: "url to my api", 
         data: JSON.stringify(data), 
         success: function(response) { 
           // $('#successMessage').html(response); 
         }, 
         complete: function() { 
          //message 
      } 
        });   

儘管如此,如果我沒有自定義頁眉發送請求(signedInUserId &的accessToken),並在我的API控制我的評論自定義標題參數,它的工作絕對沒問題。以下是我的api控制器代碼。

@RequestMapping(value = "test.json", method = { PUT }) 
public @ResponseBody 
Map<String, ? extends Object> test(HttpSession session, @RequestHeader Integer signedInUserId, @RequestHeader String accessToken, @RequestBody MyTestModel myTestModel) { 

// working 

} 

我很困惑爲什麼它不工作時,我發送自定義標題,發送自定義標題有一些問題?

編輯: 以下是我的請求和答覆標題。

 Request URL:http URL.... 
     Request Method:OPTIONS 
     Status Code:200 OK 
     Request Headersview parsed 
     OPTIONS /Url/url/add.json HTTP/1.1 
     Host: local host:8080 
     Connection: keep-alive 
     Access-Control-Request-Method: PUT 
     Origin:url 
     User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36 
     Access-Control-Request-Headers: accept, accesstoken, signedinuserid, content-  type 
     Accept: */* 
     Referer: url 
     Accept-Encoding: gzip,deflate,sdch 
     Accept-Language: en-US,en;q=0.8 
     Response Headersview parsed 
     HTTP/1.1 200 OK 
     Server: Apache-Coyote/1.1 
     Access-Control-Allow-Origin: * 
     Access-Control-Allow-Methods: GET, OPTIONS, POST, PUT, DELETE 
     Access-Control-Allow-Headers: Content-Type, x-requested-with 
     Access-Control-Max-Age: 1800 
     Allow: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS 
     Content-Length: 0 
     Date: Sun, 03 Nov 2013 19:11:20 GMT 
+0

什麼是不工作....在瀏覽器控制檯檢查請求,看狀態,什麼是發送(包括標題),返回等需要在Firefox故障排除阿賈克斯 – charlietfl

+0

當好隔離客戶端VS服務器,它只是握手,並沒有按」在此之後發送PUT請求並且不返回錯誤/響應。 在Chrome上,我收到此錯誤: 「Access-Control-Allow-Headers不允許請求標頭字段accessToken」。 – ManinGreen

+0

所以在你的網絡標籤中,你什麼都看不到在ajax中設置的url? – charlietfl

回答

1

很明顯,這個問題是由於在服務器響應中允許標題。在我的服務器設置允許的頭響應如下:

response.addHeader("Access-Control-Allow-Headers", "Content-Type, x-requested-with"); 

所以,我增加了兩個頭的accessToken和signedInUserId在允許的頭和響應頭現在看起來象下面這樣:

response.addHeader("Access-Control-Allow-Headers", "Content-Type, accessToken, signedInUserId, x-requested-with"); 

我猜這就是爲什麼請求沒有超出預檢請求(OPTION)的問題,因爲我發送的頭不允許在服務器發送的響應頭中。如果我錯了,請糾正我。

相關問題