2014-04-01 43 views
5

我花了最後一小時試圖想出解決辦法都無濟於事。 SO上有很多關於jQuery和ajax()的帖子,但是我一直沒能找到一個處理我的具體問題的帖子。爲什麼整數成爲字符串時,我使用POST到jquery.ajax PHP腳本

我的代碼的基礎:

在客戶端:

var data = {"id": 1}; 
j.ajax({ 
    type: "POST", 
    url: "postTestingResult.php", 
    data: {'data': data}, 
    dataType: "json", 
    success: ajaxSuccess, 
    error: ajaxError 
}); 

在使用PHP的服務器:

$data = $_POST['data']; 
echo $data; //{"id": "1"} 

爲什麼整數值變成一個字符串?我如何防止這種情況?我真的不想創建自定義函數來循環訪問我的數據對象(實際上它非常複雜)來轉換所有值。

非常感謝!

+2

嘗試在'data'變量上應用'JSON.stringify':'data:{'data':JSON.stringify(data)}' – hindmost

+0

請參閱我對@mesutozer的答覆的評論 –

回答

2

在你的情況,你需要json_decode你接收到的數據。然後,您將通過Ajax發送您的類型變量。

$data = json_decode($_POST['data'], true); 
// $data['id'] is now int 

$_POST['data']是一個字符串,在其他的答案解釋,但是當你解碼它,你可以內部元素得到其應有的類型。

+0

我試過了。我得到以下錯誤:「PHP警告:json_decode()期望參數1是字符串,數組給予」只需要清楚,我的真實數據對象包含更多的單個鍵/值,其中一些是嵌套的對象/陣列。 –

+0

這應該不是一個問題,只要它是一個有效的JavaScript對象的JSON對象..不知道你爲什麼得到一個警告..你確定參數1的json_decode(這是$ _POST ['數據'])是尚未解碼?你可以嘗試打印它來驗證它是一個字符串? – mesutozer

+0

嗯。好決定。出於某種原因,它不是一個字符串 - 它是作爲一個數組來傳遞的。但我不知道爲什麼。不應該jQuery ajax調用我已經使它成爲一個JSON字符串? –

5

當參數是通過$_GET$_POST發送,它們被解釋爲字符串

可能需要適當地投,使它們適應它是如何爲你工作。

+1

此外,要使JSON有效,價值觀也需要用引號括起來,這個事實非常清楚。 – Jeff

+0

如果你想轉換你需要的類型轉換$ id =(int)$ _ POST [「id」]; –

+0

這正是我不想做的事(我在我的問題中這樣說)。我沒有結婚以發送JSON。我只需要發送數據對象,理想情況下它可以解釋它的發送方式,當然我不需要額外的工作。 –

相關問題