将数据从 javascript forEach 循环中的 php 数组发送到 ajax 调用的 url

Posted

技术标签:

【中文标题】将数据从 javascript forEach 循环中的 php 数组发送到 ajax 调用的 url【英文标题】:send data from php array in javascript forEach loop to url of ajax call 【发布时间】:2021-07-15 03:18:58 【问题描述】:

我试图在 php 中循环一个 mysql 查询的结果,查询的输出是一个类似于 [10201,10202] 的数组。我想获取结果并将其循环到我的 javascript 函数中名为 id 的变量,并通过我的 ajax 调用的 url 循环它。目标是获取 id 并在另一个页面上的 sql 查询中使用它来更改我们数据库中 id 的日期。

mysql查询:

<?php
        // sql query for # print all open orders function
        $sql = "SELECT Order_PID
                FROM `Order`
                WHERE SHIPDATE IS NULL
                AND Address1 IS NOT NULL;";
        $query = mysqli_query($conn, $sql);
        while ($row = mysqli_fetch_assoc($query))  
                $order[] = $row['Order_PID'];
        
?>

javascript函数: 我正在尝试使用 forEach 函数来遍历数组的结果。

$('button#printOpenOrders').on('click', function(e) 
    if(confirm("Are you sure you want to print all open orders and mark them as pending?")) 
        e.preventDefault();
        // prints all open orders
        window.open("/resources/scripts/allOpenPDF.php");
        var arr = $order;
        arr.forEach(function(id)  // <====this function
            $.ajax(
            url: "/resources/scripts/pending-order.php?id=" + id, // <===this variable
            datatype : "string",
            success : function(data) 
                location.reload(true);
                
            )
        )
     
);

如果有帮助,这里是我的回调脚本

<?php 

    // login validation
    session_start();
    if (!isset($_SESSION['loggedin']) && $_SESSION['loggedin'] != true) 
        $url = $_SERVER['DOCUMENT_ROOT'].'/index.php';
        header("Location: ../../index.php");
    
    // establish connection to database
    include $_SERVER['DOCUMENT_ROOT'].'/resources/scripts/dbconnect.php';
    $conn = openConnection();

    // capture id 
    $id = $_GET['id'];

    $pendingDate = date_create_from_format("m/d/Y", "07/26/1996");
    $pendingDate = date_format($pendingDate, "Y-m-d H:i:s");

    $sql = $conn->prepare("UPDATE       `Order`
                           SET          SHIPDATE = ?
                           WHERE        Order_PID = ?");
    $sql->bind_param("si", $pendingDate, $id);
    $sql->execute();

    echo "success";

    closeConnection($conn);

?>

如果我的部分代码没有意义,我是新手,我正在使用我目前有限的知识将所有这一切一起科学怪人。任何朝着正确方向的推动都会非常有帮助。

【问题讨论】:

为什么要将 ID 发送到另一个页面进行更新?为什么不马上做呢? 【参考方案1】:

你可以输出 $order 变量内容,但是你需要使用 PHP 并且你必须使用 json 格式对其进行编码,所以这实际上可以工作:

var arr = <?PHP echo json_encode($order); ?>;

但它很容易出错,语法不是很好阅读,如果该变量以某种方式变为您不期望的格式,它可能会导致另一个 JavaScript 语法错误。

但我认为最好的方法是发出 AJAX 请求并获取这些订单 IDS,然后您可以创建另一个 AJAX 请求来发送所有这些订单 IDS, 所以你不需要 .forEach 东西,你处理多个订单的逻辑需要修改以适应这些变化。

但是由于您已经在 PHP 中拥有了这些 IDS,我的意思是存储在 $order 变量中,您可以对其进行编码并在一个请求中一次将所有 ID 发送给它。

【讨论】:

这行得通,帮了大忙,谢谢! 很高兴我能帮上忙,但稍后我真的建议您简化 JavaScript 中的逻辑,因此您只需在一个请求中发送所有 IDS,然后在 PHP 代码中您只需遍历每个 id并以您需要的方式处理它。如果您没有很多 id,那么好处可以忽略不计,通过在一个请求中传递所有 id,您可以确保每个订单都将按照它们出现的顺序进行处理,在您的情况下,因为对于每个订单,您创建一个新请求并不能保证它们会以相同的顺序处理,只是为了让您知道。

以上是关于将数据从 javascript forEach 循环中的 php 数组发送到 ajax 调用的 url的主要内容,如果未能解决你的问题,请参考以下文章

foreach 语句

如何将 JavaScript forEach 循环/函数转换为 CoffeeScript

JavaScript实现循环链表

(JavaScript) 将 forEach 循环与内部回调同步

@foreach 循环中的多种形式。如何使用 javascript 异步提交一个。 C# 核心剃刀

SwiftUI:如何根据 Picker 的值更新 ForEach 循环的范围