我有一个php文件,左边有很多复选框。我通过javascript提取这些值并将它们传递到一个数组中。这很好。我想通过Ajax将这个数组传递给PHP,以便与值混淆并从中创建sql语句。
$(document).ready(function(e) {
$('#getSelectedValues').click(function() {
var chkBoxArray = [];
$('.graphselectors:checked').each(function() {
chkBoxArray.push($(this).val());
});
for (var i = 0; i < chkBoxArray.length; i++) {
console.log(i + " = " + chkBoxArray[i]);
}
$.ajax({
url: 'index.php', // (1)
type: 'POST',
dataType:'json',
data: chkBoxArray, //(2)
success: function(data){
console.log(data.length);
console.log(data);
}
});
});
});
若干问题:我需要在这里添加什么文件名?原点还是目标?(2)我有很多方法:序列化,用括号{},等等。如何把它做好呢?
我得到的错误如下:
注意:未定义索引:data in graph.php
这让我有点疑惑,因为它清楚地显示没有数据正在发送。
$_POST和$_SERVER上的var_dumps提供以下结果:
array(0) {}
array(0) {}
有些不令人满意。
我哪里做错了?唯一令人困惑的方面是ajax,所有其他的东西都不是一个大问题。
该网站应该以以下方式工作:页面→复选框(点击)→按钮→Result (ajax) ->PHP获取结果->SQL DB ->PHP获取DB结果->获取结果(ajax) ->
1-您需要将ajax指向将使用您正在发送的数据的脚本。我不建议指向index.php
,因为您需要添加if语句来检查$_POST
上是否有您所期望的数据,否则它将返回与您所处的相同页面(考虑到您在index.php
中并且正在向index.php
发出请求)。这是值得考虑的一点。因为它是一个完整的请求,它的不是一个方法调用实际返回一些东西到你的页面,你需要echo
的东西。也就是说,还要考虑设置header('Content-Type: application/json')
,因为您期望dataType: 'json'
, echo json_encode($objectorarray);
2-因为你发送一个Javascript数组到PHP,它不能正确解释的结构,这就是为什么你应该使用JSON.stringify(chkBoxArray)
之前发送它。但是仅仅在data
属性上设置它会将你选择的复选框的数量作为值发送到POST
,所以考虑到data: {myCheckboxValues: JSON.stringify(chkBoxArray)}
$foo = json_decode($_POST['myCheckboxValues']);
当然,您需要在ajax调用中将目标页面作为url传递。它无法猜测哪个文件应该处理数据。至于data
属性。您需要为您的数据命名。
data: {
something: "something"
}
变为:$_POST['something']
。(价值:)
$.ajax({
url: 'target.php', // (1)
type: 'POST',
dataType:'json',
data: { data: chkBoxArray }, //(2) Now $_POST['data'] will work
success: function(data){
console.log(data.length);
console.log(data);
}
});