2012-01-25 68 views
33

我有數組由功能.push。在數組中是非常大的數據。如何最好的方式發送到PHP腳本?使用Ajax發送數組到PHP腳本

dataString = ??? ; // array? 
    $.ajax({ 
     type: "POST", 
     url: "script.php", 
     data: dataString, 
     cache: false, 

     success: function(){ 
      alert("OK"); 
     } 
    }); 

的script.php:

$data = $_POST['data']; 

    // here i would like use foreach: 

    foreach($data as $d){ 
    echo $d; 
    } 

如何是最好的方法?

回答

85

編碼您的數據字符串轉換成JSON。

dataString = ??? ; // array? 
var jsonString = JSON.stringify(dataString); 
    $.ajax({ 
     type: "POST", 
     url: "script.php", 
     data: {data : jsonString}, 
     cache: false, 

     success: function(){ 
      alert("OK"); 
     } 
    }); 

在你的PHP

$data = json_decode(stripslashes($_POST['data'])); 

    // here i would like use foreach: 

    foreach($data as $d){ 
    echo $d; 
    } 

注意

當您通過POST發送數據時,它需要一個鍵值對。

因此

data: dataString

是錯誤的。相反,這樣做:

data: {data:dataString}

+11

爲什麼使用'JSON.stringify'?只有'data:{data:dataString}'有什麼問題? –

+0

@火箭:我想你也可以這樣做,在這種情況下,Jquery會序列化數組。 – xbonez

+7

然後你不需要'json_decode','$ _POST ['data']'已經是一個數組了。 –

6
dataString = []; 
    $.ajax({ 
     type: "POST", 
     url: "script.php", 
     data:{data: $(dataString).serializeArray()}, 
     cache: false, 

     success: function(){ 
      alert("OK"); 
     } 
    }); 

http://api.jquery.com/serializeArray/

+0

我如何接下來在PHP文件中讀取? –

+1

由於'serializeArray'通過創建一個JSOn字符串來工作,所以首先需要在PHP端使用'json_decode' – xbonez

+5

我建議刪除'serializeArray',然後只是'data:{data:dataString}'。然後'$ _POST ['data']'將是一個數組。 –

3

數據jQuery中ajax()函數接受匿名對象作爲其輸入,見documentation。因此,例如,你要尋找的是:

dataString = {key: 'val', key2: 'val2'}; 
$.ajax({ 
     type: "POST", 
     url: "script.php", 
     data: dataString, 
     cache: false, 

     success: function(){ 
      alert("OK"); 
     } 
    }); 

你也可以寫POST /你自己GET查詢,像key=val&key2=val2,但你必須處理自己逃脫這是不切實際的。

+0

這對我不起作用,但是在PHP – bromelio

1

dataString表明數據被格式化爲一個字符串(也可能被一個字符分隔)。

$data = explode(",", $_POST['data']); 
foreach($data as $d){ 
    echo $d; 
} 

如果dataString不是一個字符串,但INFACT數組(你的問題表明什麼)使用JSON。

+0

dataString中這只是一個例子,'data:{id_arr:[array variable goes here]}'將被作爲數組''_POST ['id_arr']'訪問。我不必使用這個,但我不知道我必須使用 –

+1

'data:{id_arr:[array variable goes here]},'可以作爲$ _POST ['id_arr']'作爲PHP中的數組訪問 – bromelio

相關問題