【问题标题】:How to use a foreach loop with AJAX call?如何在 AJAX 调用中使用 foreach 循环?
【发布时间】:2016-11-30 02:18:39
【问题描述】:

我有一个从我的 AJAX 代码调用的 foreach 循环。似乎 foreach 循环正在被跳过。我最终希望这样做,以便 foreach 循环将使用数组中的每个值执行查询,但我首先尝试测试 foreach 循环是否有效(它没有)。我收到的警报(来自我的 AJAX)只是原始数组,而不是添加项目的那个。

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; 行,数组'kegs' 的值是通过输入字段和其他AJAX 设置的,但一切正常。我认为我的问题在于我的 PHP 代码。

【问题讨论】:

  • 您的循环似乎试图修改它所迭代的同一个变量。 $data 在运行时的实际值是多少?
  • @David 根据我测试的用户输入, $data = ["1","2","3"] 的值和我收到的警报返回相同的值 ["1 ","2","3"] .
  • 如果您在 AJAX 响应后看到警报中的值,那么实际问题是什么?
  • 在 PHP 代码中,$dataarray 还是 看起来像 数组的 string? AJAX 响应的原始结果是什么,而不是警报中的内容?
  • @David 如何检查原始结果? (我没有经验)

标签: php arrays ajax


【解决方案1】:

如果您仅通过邮寄值发送...例如在 cmets 中:1,2,3 您的 $_POST['myArray'] 收到了您发送到的内容。

因此,data 变量将接收看起来像这样的数组 ['1','2','3']

嗯...因为你没有创建一个变量 $data 作为一个数组,是的,只是在里面放一个数组。

PHP 不认为 $data[] 变量与 $data 相同。

所以,PHP 神奇地覆盖了每个相同值的值。

所以,我想如果你想重复同一个数组中的值,你必须用array_push来引用数组

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

现在,当您返回此数组时,您将收到类似 {1,2,3,1,2,3} 的响应

【讨论】:

  • 请记住,在您的函数中您并没有添加新值,您只是从帖子中获取值并将这些值放入具有相同名称的“新数组”中。
  • 使用该代码,我得到了相同的结果,并且警报显示 ["1","2","3"]
  • 哇你的代码有一个错误:你的空函数没有关闭......或者你复制这个代码错误,或者你的 if 没有通过...... if(isset($_POST['myArray' ]) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']){ 请检查您的代码是否正确。并在没有空服务器功能的情况下测试您的 if...
  • 我的 if 语句正在工作,因为我从 echo json_encode($data); 收到来自 AJAX 的警报;
  • 请再次从您的 ide 复制 if 语句
【解决方案2】:

@David 的评论回答:

在浏览器的调试工具中,查看网络请求。检查 AJAX 请求及其响应。如果结果完全用引号括起来,那么它只是一个字符串而不是数组。您可能需要在服务器端对 $_POST['myArray'] 进行 JSON 解码以将其解释为数组。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-16
    • 2020-05-01
    • 1970-01-01
    • 2015-07-04
    • 2019-11-21
    • 2023-03-27
    • 2015-05-04
    • 2019-07-18
    相关资源
    最近更新 更多