整个下午我的问题都遇到了很多问题。不幸的是,对Google和SO的无休止搜索并没有帮助我。
我需要每隔30秒使用jQuery AJAX将数组发送到PHP脚本。在构造数组并将其发送到PHP文件后,我似乎陷入困境。我无法正确解码数组,当我查看控制台时,它会给我 null 。
这是我到目前为止所拥有的。顺便说一句,我正在运行jQuery 1.11.1和PHP版本5.3.28。
jQuery / Ajax部分
$(document).ready(function(){
$.ajaxSetup({cache: false});
var interval = 30000;
// var ids = ['1','2','3'];
var ids = []; // This creates an array like this: ['1','2','3']
$(".player").each(function() {
ids.push(this.id);
});
setInterval(function() {
$.ajax({
type: "POST",
url: "includes/fetchstatus.php",
data: {"players" : ids},
dataType: "json",
success: function(data) {
console.log(data);
}
});
}, interval);
});
PHP部分(fetchstatus.php)
if (isset($_POST["players"])) {
$data = json_decode($_POST["players"], true);
header('Content-Type: application/json');
echo json_encode($data);
}
解码JSON数组后,我希望将其循环,以便从属于某个id的数据库中的行中获取特定信息。在我的情况下,行1,2和3。 但我不知道解码后的阵列是否真的准备好进行循环。我对控制台的体验很小,我不知道如何检查它是否正常。
然后将属于具有这些id的行的所有信息捆绑到新数组中,json编码,然后在成功回调中发回。然后使用此数组中发送的信息更改DOM中的元素。
有人能告诉我究竟是错误/缺失了吗? 也许答案比我想象的要容易,但我似乎无法找到自己。
祝你好运, 彼得
答案 0 :(得分:1)
我怀疑发布的数据不是正确的JSON格式。您需要使用JSON.stringify()
在javascript中对数组进行编码。构建JSON的Here is an example。
在JS中,您可以使用console.log('something');
在浏览器控制台窗口中查看输出。要在php中查看发布的数据,您可以echo '<pre>'; print_r($someArrayOrObjectOrAnything); die();
。
print_r
打印有关变量
因此,在您的情况下,使用echo '<pre>'; print_r($_POST);
查看是否实际发布了某些内容。
答案 1 :(得分:1)
jQuery.ajax
选项dataType
仅适用于服务器答案。您从'fetchstatus.php'中选择了什么类型的anser。它是对的,它是json。但是你通过post
方法发送给这个文件的不是json。
您没有json_decode
$_POST
个数据。尝试使用var_dump($_POST)
输出POST数据。
如果'玩家'没有作为参数给出,会发生什么?然后没有JSON
返回。像这样更改你的'fetchstatus.php':
$returningData = array(); // or 'false'
$data = @$_POST['players']; // @ supresses PHP notices if key 'players' is not defined
if (!empty($data) && is_array($data))
{
var_dump($data); // dump the whole 'players' array
foreach($data as $key => $value)
{
var_dump($value); // dump only one player id per iteration
// do something with your database
}
$returningData = $data;
}
header('Content-Type: application/json');
echo json_encode($returningData);
使用JSON: 您可以简单地在jQuery中使用返回的JSON数据,例如像这样:
// replace ["1", "2", "3"] with the 'data' variable
jQuery.each(["1", "2", "3"], function( index, value ) {
console.log( index + ": " + value );
});
如果您在PHP端填写$data
变量,请将您的播放器ID用作数组键,并使用其他数据作为值的数组,例如以下结构:
$data = array(
1 => array(
// data from DB for player with ID 1
),
2 => array(
// data from DB for player with ID 2
),
...
);
// [...]
echo json_decode($data);