2011-10-23 59 views
0

好吧,所以這裏是我的JS/jQuery代碼,我的rate.php文件中只有一個print_r($_POST)。問題是,$_POST接受rated作爲字符串"Array",而不是我定義的實際數組。如何糾正這段代碼,以便PHP將JSON輸入識別爲適當的數組,而不是字符串?POST,AJAX和PHP:JSON提交

var rated = {"key" : key , "value" : value}; 

$.ajax({ 
    type: "POST", 
    url: $(location).attr('protocol') + "//" + $(location).attr('hostname') + "/ajax/rate.php", 
    data: { 
    "rated" : rated 
    }, 
    success: function(data) { 
    alert(data); 
    } 
}); 

這是我得到的輸出消息:

陣列 ( [額定] =>數組 )
致命錯誤:只有變量可以通過引用傳遞在.../ajax/rate.php on line X


編輯:實際上有多個變量rated,但他們都不是陣列(因此沒有與他們的問題),所以我把它們剪下來的代碼上面爲簡潔起見。

回答

2

當傳遞JSON數據到PHP腳本,通過Ajax我會建議字符串編碼的JSON數據,然後解析它在服務器端。

var rated = {"key" : key , "value" : value}; 
var rated_encoded = JSON.stringify(rated); 

$.ajax({ 
    type: "POST", 
    url: $(location).attr('protocol') + "//" + $(location).attr('hostname') +  "/ajax/rate.php", 
    data: { 
    "rated" : rated_encoded 
    }, 
    success: function(data) { 
    alert(data); 
    } 
}); 

那麼你應該能夠訪問使用$ _ POST在PHP腳本的POST變量與任何其他標量值。一旦你在服務器端有JSON字符串'rating_encoded',使用PHP的json_decode()將它解析爲關聯數組。

if(isset($_POST["rated"])){ 
    $rated_json = $_POST["rated"]; 
    $JSONArray = json_decode($rated_json, true); //returns null if not decoded 
    //Values can now be accessed like standard PHP array 
    if($JSONArray !== null){ 
     $key = $JSONArray["key"]; 
     $value = $JSONArray["value"]; 
    } 
}  

我發現,這種方法是Javascript對象數據傳送到服務器,反之亦然(使用PHP的json_encode()來翻譯PHP數組到有效的JavaScript對象)

0

這是一個合適的數組,而不是你期望的數組。簡單地通過rated參數data參數可以實現您可能想要的。即

var rated = {"key" : key , "value" : value}; 

$.ajax({ 
    type: "POST", 
    url: $(location).attr('protocol') + "//" + $(location).attr('hostname') + "/ajax/rate.php", 
    data: rated, 
    success: function(data) { 
    alert(data); 
    } 
}); 
+0

實際上有更多的非常有效變量,但沒有一個是數組(因此它們沒有問題),所以爲了簡潔起見,我將它們從上面的代碼中刪除了。 – Matt

+0

@Matt,那麼你期望的請求數據是什麼?因爲不是你傳遞參數'rated'的值是'{「key」:key,「value」:value}',HTTP不支持參數嵌套。 –