我的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。
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,所以我发现调试特别困难。
有什么建议吗?提前谢谢。
答案 0 :(得分:3)
您正在使用:
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
。