参数未正确传递给AJAX-编码问题

Params Not being passed to AJAX correctly - Encoding issue?

本文关键字:AJAX- 编码 问题 参数      更新时间:2023-09-26

这是我的代码:

var params = '_SaveEditUserReq=1' ;
for(i=0; i<document.editUserForm.elements.length; i++)
{
    // if(document.editUserForm.elements[i].name.substr(0, 7) == "school|") {
    if (document.editUserForm.elements[i].type == 'checkbox') {
        // If the id begins with 'school|', take the value if it is checked.
        if (document.editUserForm.elements[i].checked) {
            console.log("CHECKED!" + document.editUserForm.elements[i].value);
            params += "&" + encodeURIComponent(document.editUserForm.elements[i].name) + "=" + encodeURIComponent(document.editUserForm.elements[i].value) ;
            console.log(params);
        }
    } 
    else {
        // Take everything else
        params += "&" + document.editUserForm.elements[i].name + "=" + document.editUserForm.elements[i].value ;
    }
}

以下是正在构建的内容:

SaveEditUserReq=1&_username=jgald&_orig_username=jgald&password_error_msg=&new_password_ok=YES&new_password=&new_password_text=&new_password_too=&new_password_too_text=&_last_name=TheSirName&_first_name=TheName&_middle_initial=&_profile=Teacher&_email=email@email.com&_teacher=&school%7C=Baker%20Elementary%20School&school%7C=Brookland%20Middle%20School&school%7C=Charles%20M.%20Johnson%20Elementary%20School&=SAVE CHANGES&=CANCEL&_site=TheSite

当它被传递给PHP时,$_POST数组只看到最后一个被检查的checkbox

在这种情况下:

[school|] => Charles M. Johnson Elementary School

你能看到出了什么问题吗?

给定多个具有相同名称的键/值对,PHP将丢弃除最后一个以外的所有键/值,除非键名称以字符[]结尾。

如果这些字符存在,那么它将用一个名称不包括[]的数组填充$_GET(或post等)。

foo.php?bar%5B%5D=1&bar%5B%5D=2

将给出:

$_GET['foo'][0] == 1;
$_GET['foo'][1] == 2;

从JavaScript部分来看,有两个问题

编码名称

您不编码名称,只编码值

 params += "&" + encodeURIComponent(document.editUserForm.elements[i].name)

应该是

 params += "&" + document.editUserForm.elements[i].name

不对else中的值进行编码

您没有对else中的值进行编码!

"=" + document.editUserForm.elements[i].value ;

需要

"=" + encodeURIComponent(document.editUserForm.elements[i].value) ;