2013-02-15 112 views
1

我從jquery $ .ajax,這工作正常,切換到使用AngularJS $ http.put來訪問一個restful API。

我可以進行API調用,但PUT數據是沒有得到發送 - 所以我看到的API使用空數據對象的PUT請求,其中應包含一個JSON字符串 - >data.values = 'a json structure'

$http.put(
    $rootScope.api_url, 
     { 
      values: jsonifiedValues 
     }, 
     { 
     headers: { 
      apihash: sha256hash 
     } 
    }).success(function(data,status,headers,config){ 
     // handle success 
}).error(function(data,status,headers,config) { 
     // handle failure 
}); 

我之前沒有使用過AngularJS的$ http,但是當我將PHP api中的數據轉儲出來時,它只是空的。這是我如何從PHP請求拉:

parse_str(file_get_contents('php://input'), $put_vars); 
$arr_req_data = $put_vars['values'];  

在我的API如果從請求不符合建立在PUT值SHA256散列發送的apihash,它失敗。

這是在JQuery中工作,現在只是失敗我已經切換到$ http。我不確定爲什麼PUT數據似乎是空的。

+1

你看過瀏覽器使用瀏覽器的devtools實際發送的內容嗎? – Andorbal 2013-02-15 13:49:36

+0

好點,我沒有檢查它,但數據正在發送 – 2013-02-15 22:48:52

回答

1

file_get_contents('php://input')返回的值將是一個JSON字符串(提供的所有內容都已發送),因此parse_str不是處理該數據的正確函數。
改爲使用json_decode

此外,沒有必要發送jsonified值,它只會使事情更加複雜,因爲您必須使用兩次json_decode

+0

這是做的伎倆,謝謝。不知道爲什麼當AngularJS不是時,jQuery工作。 AJAX方法看起來如此simialr – 2013-02-15 22:49:24

+0

@Skeater我會說你使用jQuerys'.serialize'這將與'parse_str'一起使用,因爲它產生正確的格式。 – Yoshi 2013-02-16 15:55:50

+0

有沒有辦法讓'$ http.put'不發送json對象,併發送格式正確的對象? – Jhecht 2014-08-25 07:13:35