2016-11-30 160 views
0

我有一個從我的AJAX代碼調用的foreach循環。看起來,foreach循環正在被跳過。我最終希望做到這一點,以便foreach循環將使用數組中的每個值執行查詢,但我首先嚐試測試foreach循環的工作方式(它沒有)。我收到的警報(來自我的AJAX)只是原始數組,而不是添加項目的數組。如何使用帶有AJAX調用的foreach循環?

PHP:

$data = array(); 
    if(isset($_POST['myArray']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']){ 
    $data = $_POST['myArray']; 
    foreach ($data as $item) { 
     $data[] = $item; 
    } 
    echo json_encode($data); 
    die();  
} 

AJAX:

$(document).ready(function(){ 
    $('#btn-addkegs').click(function() { 
     var arr = kegs; 
     var myArray = JSON.stringify(arr); 

     $.ajax({ 
      url: "addkegs.php", 
      method: "POST", 
      dataType: "json", 
      data: {myArray: myArray}, 
      success: function (result) { 
      alert("Your kegs have been added! These include: " + result); 
      textarea.value = ""; 
      kegs = []; 
     } 
        }); 

      }); 
     }); 

至於線var arr = kegs;,陣列 '小桶' 的值通過輸入字段和其它AJAX設置,但所有的工作精細。我認爲我的問題在於我的PHP代碼。

+0

你的循環似乎試圖修改它迭代的同一個變量。運行時'$ data'的實際值是多少? – David

+0

@David基於我測試的用戶輸入,$ data = [「1」,「2」,「3」]和我接收的警報的值返回相同的值[「1」,「2」,「 3「]。 – jh95

+0

如果您在AJAX響應後看到警報中的值,那麼實際的問題是什麼? – David

回答

0

如果您是通過郵寄發送的只有值...如評論:1,2,3 您的$ _POST ['myArray']被文學接收到您發送的內容。

因此,數據變量將收到這似乎是這個數組[「1」,「2」,「3」]

好吧......既然你沒有創建一個變量$數據數組,是的,只把數組放在裏面。

PHP不認爲$ data []變量與$ data相同。

因此,PHP很神奇地覆蓋了每個相同值的值。

所以,我覺得如果你要重複相同的數組中的值,你必須引用數組與array_push現在

$data = $_POST['myArray']; 
foreach ($data as $item) { 
    array_push($data, $item); 
} 

當你回到這個數組,你將有一個像{1響應,2,3,1,2,3}由@大衛評論

+0

在你的函數中記住你並沒有提出新的值,你只能從一個帖子中獲取值並將這些值放入一個具有相同名稱的「新數組」中。 –

+0

使用該代碼,我得到了相同的結果,並警報顯示[「1」,「2」,「3」] – jh95

+0

哇你的代碼有一個錯誤: 你的空函數沒有關閉...或者你複製這段代碼錯誤,或者你的if不通過... if(isset($ _ POST ['myArray'])&&!empty($ _ SERVER ['HTTP_X_REQUESTED_WITH']){ 請檢查您的代碼是否正確。測試你是否沒有函數空服務器... –

0

答:

In your browser's debugging tools, take a look at the network requests. Examine the AJAX request and its response. If the result is entirely wrapped in quotes, then it's just a string and not an array. You may need to JSON-decode $_POST['myArray'] server-side to interpret it as an array.

我需要改變$data = $_POST['myArr'];$data = json_decode($_POST['myArr']);