如何使用JQuery和Ajax将一维数组传递到php页面?

如何使用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

我有一个一维数组,它是根据复选框上的变化填充和排空的。为了演示模式,我的数组如下所示:

arrReservedSeats=[1A,3B,5C,…]

我想在php端使用这个数组,在一些操作之后将它们存储在数据库中。我的javascript函数的ajax部分由Purchase按钮触发,如下所示:

Ajax代码:

$.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>