2013-08-21 95 views
2

我正在使用JSON將數組發佈到PHP文件。這是行不通的。問題沒有發生。如果我分解數據類型:「json」然後我得到警報(但沒有數據)。JSON發佈和解碼數組到PHP

這是我的jQuery代碼

var arr = new Array(); 
arr.push('1','Brussels|25'); 
arr.push('2','Antwerp|40'); 
$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    url: "jsondecode.php", 
    data: JSON.stringify(arr), 
    dataType: "json", 
    success: function(data){alert(data);}, 
    failure: function(errMsg) { 
    alert(errMsg); 
    } 
}); 

,這是我的PHP代碼(jsondecode.php);

<?php 
$array = json_decode($_POST["arr"]); 
foreach($array as $el){ 
    $el_array=explode('|',$el); 
    echo"City=".$el_array[0]." And Age = ".$el_array[1].""; 
} 

?> 

有人知道這個有用的教程嗎?

+1

「不起作用」是什麼意思? – deceze

+0

你是什麼意思與「不工作」? –

+0

什麼不起作用? –

回答

4

你必須以這種格式發佈數據檢索像$_POST["arr"]

data: { arr : JSON.stringify(arr) }, 
+0

我現在做了,但$ _POST [「arr」]仍然是空的 –

+0

@MichaelV檢查控制檯什麼數據發送到'jsondecode.php'。 –

+0

在控制檯沒有輸出 –

1

替換:

$array = json_decode($_POST["arr"]); 

通過:

$array = json_decode($_POST["arr"], true); 
2

到底什麼是你想? 看起來好像您正試圖將鍵值對放入JavaScript-Array中,arr.push('1', 'Brussels|25');期望在鍵「1」下包含「Brussels | 25」的數組 - 但請注意,您正在創建此數組:["1", "Brussels|25", "2", "Antwerp|40"]

如果你想發送JSON,JSON發送數據:

var arr= [{ 
    "city" : "Brussels", 
    "age" : 25 
},{ 
    "city" : "Antwerp", 
    "age" : 40 
}]; 

那麼你的Ajax調用:

$.ajax({ 
    type: "POST", 
    url: "jsondecode.php", 
    data: {arr: JSON.stringify(arr)}, 
    success: function(data){ 
     console.log("success:",data);}, 
    failure: function(errMsg) { 
     console.error("error:",errMsg); 
    } 
}); 

所以你不需要爆炸數據服務器片面的。

服務器片面腳本:

<?php 
$data = json_decode($_POST["arr"]); 
// will echo the JSON.stringified - string: 
echo $_POST["arr"]; 
// will echo the json_decode'd object 
var_dump($data); 
//traversing the whole object and accessing properties: 
foreach($data as $cityObject){ 
    echo "City: " . $cityObject->city . ", Age: " . $cityObject->age . "<br/>"; 
} 
?> 

希望,現在這個可以幫助你。

@edit:順便說一下,使用console.log()console.error()而不是警報。警報將導致腳本暫停,直到您單擊確定,並且您看不到警報中的對象。

@ 2日編輯:劇本正在測試,我刪除了不必要的代碼,並添加了服務器片面代碼

+0

好的,我用這個代碼,我只是改變了數據:{arr:JSON.stringify(arr)},數據{:jsonarry:JSON.stringify(arr}, 但仍然無效,沒有任何東西寫入控制檯logo當我刪除數據類型:「json」行我得到了一個成功的響應(但沒有數據) –

+0

你調整了你的php腳本到你的改變?嘗試在jsondecode.php文件中回顯一些東西 - 確保你 –

+0

我在php腳本中輸入以下內容echo「postarr =」。$ _ POST [「jsonarray」];在控制檯中,我只看到消息'sucess:postarr =',因此沒有數據 –

0

爲我工作:

JS:

$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    url: "jsondecode.php", 
    data: JSON.stringify({"1": "Brussels", "2": "Antwerp"}), 
    success: function(data){alert(data);}, 
    failure: function(errMsg) { 
     alert(errMsg); 
    } 
}); 

PHP:

<?php 
$p = file_get_contents('php://input'); 
$x = json_decode($p, true); 
echo $x["1"]; 
?>