2016-11-30 158 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']);