如何使用JQuery和Ajax将一维数组传递到php页面?
我有一个一维数组,它是根据复选框上的变化填充和排空的。为了演示模式,我的数组如下所示: arrReservedSeats=[1A,3B,5C,…] 我想在php端使用这个数组,在一些操作之后将它们存储在数据库中。我的javascript函数的ajax部分由Purchase按钮触发,如下所示: Ajax代码:如何使用JQuery和Ajax将一维数组传递到php页面?,jquery,json,ajax,Jquery,Json,Ajax,我有一个一维数组,它是根据复选框上的变化填充和排空的。为了演示模式,我的数组如下所示: arrReservedSeats=[1A,3B,5C,…] 我想在php端使用这个数组,在一些操作之后将它们存储在数据库中。我的javascript函数的ajax部分由Purchase按钮触发,如下所示: Ajax代码: $.ajax({ url: 'makePurchase.php', type: 'POST', dataType: 'te
$.ajax({
url: 'makePurchase.php',
type: 'POST',
dataType: 'text',
data: {"arrResSeats" : arrReservedSeats}
})
.done(function(response) {
if(response == "success")
{
//..
}
else if(response == "failure")
{
//..
}
})
.fail(function(jqXHR, status, error) {
alert(jqXHR.response);
})
.always(function(){
//..
});
我对返回一些数据到javascript端不感兴趣,所以我只是使用了以“文本”形式返回数据的方法
makePurchase.php:
if(isset($_POST["arrResSeats"]))
echo("<script>console.log('PHP: ".$_POST["arrResSeats"]."');</script>");
// Database operations...
if(//operations are okay)
echo "success";
else
echo "failure";
问题是,我不能通过ajax与我的php页面通信,如果我只发送一个变量,而不使用json,我可以,但在这种情况下,我需要传递一个数组。谢谢你的关注
注意:我已经检查了Stackoverflow上几乎所有的相关链接,但我无法使它们中的任何一个在我的项目中有用。我同意,可能应该有效。如果您得到的不是200状态码,比如404或500,那么您的PHP页面的URL可能有错误,或者PHP页面本身有问题。我在我的服务器上尝试了它,它看起来确实可以工作,尽管$\u POST[Arrrestats]已经是一个数组了。你不应该破译它 如果我说:
<?
$arrResSeats = $_POST["arrResSeats"];
print_r($_POST["arrResSeats"]);
?>
我不确定您是否需要在HTML页面上进行字符串化和解析
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title></title>
<meta name="generator" content="BBEdit 11.6" />
<link rel="icon" href="data:,">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</head>
<body>
<script>
arrReservedSeats = ["1A","3B", "5C"];
$.ajax({
url: 'purchase.php',
type: 'POST',
dataType: 'text',
data: {"arrResSeats" : arrReservedSeats}
})
.done(function(response) {
if(response == "success")
{
//...
}
else if(response == "failure")
{
//...
}
})
.fail(function(jqXHR, status, error) {
alert(jqXHR.response);
})
.always(function(){
//...
})
</script>
</body>
</html>
您也可以只传递一个JSON字符串作为arrResSeats的值,或者在PHP页面上重命名并解码该字符串。为了使问题更容易理解: 当我触发其他ajax功能时,它们工作正常,网络选项卡如下所示: 然而,当我尝试这个方法时,结果并不是它应该得到的结果: 仅此而已,网络选项卡中没有更多操作
如您所见,没有后期操作。我使用这个函数和其他合适的函数一样。我看不出有什么不同,所以这对我来说很奇怪。同意“json_解码”和“解析/字符串化”。我还认为这可能是apache的设置,即:他在JSON对象中发送了太多信息,apache阻止了请求。首先,我得到了200个状态码,path php文件中也没有任何错误。在这种情况下,这有点奇怪。我不确定您是否需要在HTML页面上进行字符串化和解析。我完全同意你的话,一开始我也这么认为,但在stackoverflow中,我读了很多建议在POST数组中使用json的评论。所以AJAX处理程序甚至完全没有启动。您是否查看了控制台以查看是否存在JS错误或其他阻止处理程序触发的错误。从你所说的,听起来你甚至从来没有发布过数据。您可能只是有语法错误?您的第一篇文章中有一个结尾},看起来不属于最后一篇。@sscotti在您提到可以正确使用后,我将代码修改为不使用JSON的方式。我更新了我的第一条信息,你介意让你检查一下吗?我看不到任何语法错误。不确定是什么问题。我发布的两段代码为我工作。一个是HTML页面,另一个是PHP页面。您应该能够使用web工具中的inspector查看:1。如果处理程序连到你的按钮上,或者你拥有的任何东西上。您显示的图像看起来像是向页面发出GET请求?这就意味着甚至没有人在调用AJAX。我发布的代码在我的服务器上运行得很好,这是一个使用PHP7.x在Mac上运行的MAMP。@sscotti通过这里的帮助解决了这个问题。你是对的,没有必要使用Json。简单的文本回应就足够了。再次感谢!评论不用于扩展讨论;这段对话已经结束。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title></title>
<meta name="generator" content="BBEdit 11.6" />
<link rel="icon" href="data:,">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</head>
<body>
<script>
arrReservedSeats = ["1A","3B", "5C"];
$.ajax({
url: 'purchase.php',
type: 'POST',
dataType: 'text',
data: {"arrResSeats" : arrReservedSeats}
})
.done(function(response) {
if(response == "success")
{
//...
}
else if(response == "failure")
{
//...
}
})
.fail(function(jqXHR, status, error) {
alert(jqXHR.response);
})
.always(function(){
//...
})
</script>
</body>
</html>