PHP, Javascript, Ajax和获取结果的方面


PHP, Javascript, Ajax and the aspect of getting a result

我有一个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)}

在您的PHP脚本中,考虑到要采取的所有安全措施,您可以$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);
    }
});