将数据从 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的主要内容,如果未能解决你的问题,请参考以下文章
如何将 JavaScript forEach 循环/函数转换为 CoffeeScript
(JavaScript) 将 forEach 循环与内部回调同步