2011-07-19 98 views
1

我知道關於這個問題有很多不同的問題,但它們都不屬於我。我有一個Ajax請求如下:AJAX,JSON,jQuery和PHP

var responsePacket; 
$.ajax({ 
    dataType: 'json', 
    type:'POST', 
    data:{ 
     "updatePacket":{ 
      "job":"name-update", 
      "firstName":firstName, 
      "lastName":lastName 
     } 
    }, 
    processData: false, 
    url:'modify.php', 
    success: function(json){ 
     console.log(json); 
     responsePacket = json; 

     if(responsePacket.updateStatus==true){ 
      genAlertAlignAndShow('Name Successfully Updated', false, 4000); 
     } 
     else{ 
      genErrorAlignAndShow('Name Update Failed!', false, 4000); 
     } 
    } 
}) 

而且是我在另一端PHP如下:

$updatePacket = json_decode($_POST['updatePacket'], true); 
//and I access variables from the JSON Object like this: 
$job = $updatePacket['job']; 

爲響應AJAX,PHP文件會衝出來一個簡單的JSON對象,是的,我的標題設置爲application/json。這就是我一個輸出的JSON響應,我已經測試過它,它似乎回到了AJAX請求時,我鑽機它返回一個靜態響應:

$responsePacket = array("updateStatus"=>true); 
echo json_encode($responsePacket); 

但現在的問題是 作爲你可以看到我輸出的數據到控制檯,但它說的是null,我推斷這表明JSON沒有正確地到達PHP。那麼,是否有適當的方法來創建JSON對象並準備一個AJAX請求,以便將數據保存到PHP腳本中。

我一直在努力解決這個問題約3小時,現在歡迎任何建議。

+0

'var_dump($ _ POST);' –

+0

我已經複製到上面的代碼並創建一個名爲'modify.php'的文件,您的代碼似乎對我來說工作正常。我能夠看到'updateStatus'是'true'。當'updateStatus'爲'false'時,你有'if'語句處理case嗎?問題可能存在嗎? –

回答

0

我想通了。這裏是我的AJAX Requst:

$.post('modify.php', { job: "name-update", lastName: lastName }, function(data){ 
    console.log(data); 
}) 

問題:
當聲明一個AJAX Post請求將在變量名的報價將會使變量不可直接接收腳本數據。

1

我相信$_POST['updatePacket']實際上並不是一個json字符串。嘗試像這樣訪問它:

$updatePacket = $_POST['updatePacket']; 
$job = $updatePacket['job']; 

不需要json_decode()它。從json_decode() manual(返回值):返回

NULL,如果JSON不能被解碼...

試試看吧。正如評論中所提到的,var_dump($_POST);應該是您嘗試的第一件事,以確保您獲得您的想法。

-1

你做錯了。您不發送JSON對象到服務器,您發送鍵/值對。這正是jQuery所期望的。像這樣做,而不是:

data: { 
    "job": "name-update", 
    "firstName": firstName, 
    "lastName": lastName 
}, 

和訪問值這樣的:

​​
+0

這不是唯一的方法。如果你有一個大的表單,序列化表單會容易得多。這就是該功能存在的原因。它還使您能夠重複使用某個功能。 – Goddard

+0

爲什麼要投票?根據他的例子,他做錯了。只要看看接受的答案,並與我的比較!他明白了,但「爲什麼」是錯誤的。你應該去投票! – fromvega

0

你可以很容易地用jquery或javascript單獨乾淨地獲取表單數據。

所有你需要做的就是.serialize()數據。這裏就是一個例子。

$("form").on("submit", function(event) { 
    event.preventDefault(); 
    console.log($(this).serialize()); 
}); 

一旦完成,您可以轉換一個看起來像這樣的字符串。

"param1=someVal&param2=someOtherVal" 

與此

$params = array(); 
parse_str($_GET, $params); 

這種用法你也想過濾數據,你應該這樣做之前,上面。

http://php.net/manual/en/function.filter-input.php 

這樣做是否耗時較短,然後將每個單獨列出在您的ajax中。你也可以創建一個函數來做到這一點,所以你不會不斷地編寫ajax樣板代碼。