PHP/JS Ajax _POST数组不张贴


PHP/JS Ajax _POST Array not Posting

我的ajax代码有些奇怪。我很难缩小范围。

JavaScript:

//Discard Displaying Cards
$(".discard").click(function(){
    var gameId = 20;
    var cardArray = [];
    $( ".card" ).each(function() {
        var cardId = $(this).attr('id');
        cardArray.push(cardId);
    });
    $.ajax({
        type: 'POST',
        url: './system/actions/discard.php',
        data: "gameId=" + gameId + "&cardArray=" + cardArray,
        success: function(data) {
            console.log(cardArray);
            console.log("Success.");
            console.log(data);
        }
    });
});

javascript post到一个文件discard.php,其中给出了两个参数:gameId和cardArray。gameId现在是静态的,但cardArray是由每个"。元素加载到页面上。每个DOM id反映了我的数据库中的card_id。

discard.php

//Classes
include $_SERVER["DOCUMENT_ROOT"] . '/system/classes/cards.php';
header("Content-Type: text/html");
$gameId = empty($_GET['gameId']) ? '' : $_GET['gameId'];
$numbers = empty($_GET['cardArray']) ? '' : $_GET['cardArray'];

$regex = preg_replace('/[^,;a-zA-Z0-9_-]|[,;]$/s', '', $numbers);
$cardArray = explode(",", $regex);
foreach ($cardArray as $cardId) {
    discardCards($cardId, $gameId);
};

discard.php应该从ajax请求中读取$_GET报头。但由于某种原因,它失败了。有趣的是,如果我用手动GET头直接调用页面,例如我浏览到:

domain.com/system/actions/discard.php ? gameId = 20, cardArray =("1"、"3")

或者

domain.com/system/actions/discard.php ? gameId = 20, cardArray = 1, 3

脚本工作正常!
我认为这可能是ajax发布的格式,因此是正则表达式,但是唉,它不起作用。因为我甚至不确定如何在它所调用的页面上显示或查看所请求的ajax数据URL,我发现它特别难以调试。

有什么建议吗?

您正在使用:

type: 'POST',

但是你收到的是$_GET,把它改成$_POST:

$gameId = empty($_POST['gameId']) ? '' : $_POST['gameId'];
$numbers = empty($_POST['cardArray']) ? '' : $_POST['cardArray'];

或者将AJAX函数更改为:

type: 'GET',

而且,data应该是一个字符串。所以使用serialize():

$(form_id).serialize();

其中form_id为形式

id