首页 > 解决方案 > 将数据从 javascript forEach 循环中的 php 数组发送到 ajax 调用的 url

问题描述

我试图在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);

?>

如果我的部分代码没有意义,那么我是新手,我正在利用我目前有限的知识将所有这一切一起弗兰肯斯坦。任何朝着正确方向的轻推都会非常有帮助。

标签: javascriptphpjquerymysqlajax

解决方案


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

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

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

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

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


推荐阅读