XMLHttpRequest 发送Post数据时未被发送

8

这是JavaScript代码:

function eAC(emailData) {
    if (window.XMLHttpRequest) {
        httpRequest = new XMLHttpRequest();
    }

    if (!httpRequest) {
        return false;
    }

    console.log(emailData);

    var fd = new FormData();
    fd.append("email", emailData);

    httpRequest.onreadystatechange = eAC_callback; 
    httpRequest.open('POST', "http://website.com/file.php");
    httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    httpRequest.send(fd);
}

function eAC_callback() {
    if (httpRequest.readyState === 4) {
        if (httpRequest.status === 200) {
            var response = JSON.parse(httpRequest.responseText);
                console.log(response);
        } else {
            return false;
        }
    }
};

这是php代码:

$pec_result = array();

if(isset($_POST['email']) && strlen($_POST['email']) > 0){
    $pec_result['error'] = 'Its good';
    echo json_encode($pec_result);
    die();
} else {
    $pec_result['error'] = $_POST['email'];
    echo json_encode($pec_result);
    die();
}

问题在于$_POST ['email']的值为NULL。当控制台输出emailData的值时,为什么$_POST['email']为空?有人可以帮忙吗?我认为问题出在附加部分。(不确定) 请不要使用jQuery。我知道如何在jQuery中完成此操作,但我想学习如何在javascript中完成。谢谢

你正在使用什么浏览器? - Sina R.
2个回答

6
你的问题在于使用FormData时,请求被发送为multipart/form-data而不是application/x-www-form-urlencoded。请删除设置内容类型的那一行。当你将FormData对象传递给XMLHttpRequest.send时,正确的内容类型将自动设置。

3

试一下这个(已编辑)

fd='email='+emailData;

完整代码:

function eAC(emailData) {
    if (window.XMLHttpRequest) {
        httpRequest = new XMLHttpRequest();
    }

    if (!httpRequest) {
        return false;
    }

    console.log(emailData);

//    var fd = new FormData();
//    fd.append("email", emailData);
      fd='email='+emailData;

    httpRequest.onreadystatechange = eAC_callback; 
    httpRequest.open('POST', "http://website.com/file.php");
    httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    httpRequest.send(fd);
}

function eAC_callback() {
    if (httpRequest.readyState === 4) {
        if (httpRequest.status === 200) {
            var response = JSON.parse(httpRequest.responseText);
                console.log(response);
        } else {
            return false;
        }
    }
};

谢谢,现在它工作正常了。但为什么在代码中new FormData()没有起作用?Moz文档在他们的样例中使用了它 https://developer.mozilla.org/en-US/docs/Web/Guide/Using_FormData_Objects - Jo E.
我不知道,但让我们思考一下为什么jQuery要编写.serialize()方法?这表明我们应该以查询字符串格式发送数据。 - Sina R.
你得到了你的答案吗? - Sina R.
我明白了,可能是浏览器的问题,页面没有指定。不管怎样,再次感谢你! - Jo E.
你好,你试过在Firefox中使用Mozilla的方法吗?不客气 (-:。 - Sina R.
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接