Javascript Ajax向PHP传递值

Javascript Ajax向PHP传递值,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我想通过ajax(在同一页面上)将多个值传递给php,下面是我的代码: HTML(user\u list.php): <button type="submit" class="button button-block savebutton" name="save_changes"/> Save changes</button> $(".savebutton").on("click", function (event) { event.prevent

我想通过ajax(在同一页面上)将多个值传递给php,下面是我的代码:

HTML(user\u list.php)

<button type="submit" class="button button-block savebutton" name="save_changes"/>
        Save changes</button>
$(".savebutton").on("click", function (event) {
    event.preventDefault();
    var js = [];
    var i = 0;
    $('select').each(function () {
        var a = {"id": "", "permission": ""}
        a.id = $(this).val();
        a.permission = $(this).children(":selected").text();
        js.push(a);
        alert(js[i].permission + " - "+js[i].id);
        i++;
    });
    $.ajax({
        type: "POST",
        url: "user_list.php",
        data: {result: JSON.stringify(js)}
    });
    return false;
});
if ($_SERVER['REQUEST_METHOD'] == 'POST') {

if (isset($_POST['delete_selected'])) { // Button to delete selected user(s)

    if (!empty($_POST['check_list'])) {
        foreach ($_POST['check_list'] as $id) {
            $sql = "DELETE FROM users WHERE id=$id";
            $mysqli->query($sql);
            header("Refresh:0"); //Refresh page
        }
    }

}

// Other if above works fine
elseif (isset($_POST['result'])){
    // I want to get the js array with the values here after ajax
}

else {
    // But I get here, and I don't get the js array
}
}
PHP(user\u list.PHP)

<button type="submit" class="button button-block savebutton" name="save_changes"/>
        Save changes</button>
$(".savebutton").on("click", function (event) {
    event.preventDefault();
    var js = [];
    var i = 0;
    $('select').each(function () {
        var a = {"id": "", "permission": ""}
        a.id = $(this).val();
        a.permission = $(this).children(":selected").text();
        js.push(a);
        alert(js[i].permission + " - "+js[i].id);
        i++;
    });
    $.ajax({
        type: "POST",
        url: "user_list.php",
        data: {result: JSON.stringify(js)}
    });
    return false;
});
if ($_SERVER['REQUEST_METHOD'] == 'POST') {

if (isset($_POST['delete_selected'])) { // Button to delete selected user(s)

    if (!empty($_POST['check_list'])) {
        foreach ($_POST['check_list'] as $id) {
            $sql = "DELETE FROM users WHERE id=$id";
            $mysqli->query($sql);
            header("Refresh:0"); //Refresh page
        }
    }

}

// Other if above works fine
elseif (isset($_POST['result'])){
    // I want to get the js array with the values here after ajax
}

else {
    // But I get here, and I don't get the js array
}
}
所以我有两个问题,第一个是我通过了elseif,第二个是我没有得到数组。我认为问题在于ajax,因为填充数组可以正常工作

编辑:我将php移到了另一个页面,现在它可以工作了。

试试这个

<button type="submit" class="button button-block savebutton" name="save_changes[]"/>Save changes</button>
保存更改

尽管您的Ajax请求已启动,但当您按下按钮时,“正常”提交请求也会启动。为了防止第二个请求(因此只保留Ajax请求),必须
返回false
onclick
回调的末尾

解决方案#1:

解决方案#2(也由@charlietfl提出):


似乎当您提交POST请求时,数据作为其自己的POST字段出现。只需检查您提交的内容的值。例如,如果您做了相同的操作,但将
foo
作为
bar
hello
作为
world
,您可以使用如下内容检查
foo
hello

elseif (isset($_POST['foo'], $_POST['hello']) {
    # your code
}

使用浏览器开发工具检查Ajax请求。请求在那里看起来不错吗?
if
语句中的其他条件是什么?如果'sTry
var\u dump($\u POST)),其中一个可能会击中并短路else在PHP脚本的开头。这显示了什么?@ZoliSzabóarray(2){[“permission_select”]=>array(4){[0]=>string(1)“5”[1]=>string(2)“15”[2]=>string(2)“16”[3]=>string(2)“17”}[“save_changes”]=>array(1){[0]=>string(0)”}}如果您想立即读取数组,请不要将其字符串化,因为phpthat中的数组没有帮助:(或使用
event.default
这确实有帮助,现在我在网络监视器中看到了post方法。但我仍然没有谈到php部分。请编辑您的问题并发布完整的php代码,这样我们也可以帮助您处理php部分。@ZoliSzabódone,但如果第一个很好,我只对第二个有问题。解释在哪里?只有代码的答案质量不好如果他们没有解释为什么代码会产生影响,或者什么被改变了,为什么