【问题标题】:PHP/JS Ajax _POST Array not PostingPHP/JS Ajax _POST 数组未发布
【发布时间】:2015-10-13 00:26:26
【问题描述】:

在我的 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 发布到一个文件discard.php,在该文件中给它两个参数:gameId 和cardArray。 gameId 现在是静态的,但 cardArray 由页面上加载的每个“.card”元素的 DOM id 组成。每个 DOM id 都反映了我数据库中的 card_id。

丢弃.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,所以我发现它特别难以调试。

有什么建议吗?提前致谢。

【问题讨论】:

  • console.log("gameId=" + gameId + "&cardArray=" + cardArray);
  • returns: "gameId=20&cardArray=2,4" ... 但就像我之前说的,discard.php 没有从 AJAX 正确读取它。因为我可以在浏览器中手动转到“/system/actions/discard.php?gameId=20&cardArray=2,4”,它会进行正确的数据库更改。但是,从 AJAX 源页面来看,它不会对数据库进行更改。

标签: javascript php jquery ajax regex


【解决方案1】:

您正在使用:

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。

【讨论】:

  • 噢!将其更改为 $_POST 修复了它。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-21
  • 1970-01-01
  • 2016-08-29
  • 1970-01-01
  • 2017-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多