这是 JS 对象
var datas = {
name: "xyz",
age:21,
}
var datas2 = JSON.stringify(datas);
下面的 AJAx 请求正确传递数据
$(function(){
$.ajax({
url:'two.php',
type:'POST',
dataType:'html',
data:{data:datas2}
});
});
开发者工具中的响应:
Array
(
[data] => {"name":"xyz","age":21}
)
现在尝试使用Javascript AJAX Reuest
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
}
}
xmlhttp.open("POST","two.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
// xmlhttp.setRequestHeader("Content-type","application/json");
xmlhttp.send(datas2);
开发者工具中的响应:
Array
(
[{"name":"xyz","age":21}] =>
)
我哪里出错了?
最佳答案
您正在发送两个不同的值。 jQuery 会将对象 {data: datas2}
转换为字符串
data={"name":"xyz","age":21}
而xmlhttp.send(datas2)
只会发送字符串
{"name":"xyz","age":21}
差别很大啊!在第二种情况下,{"name":"xyz","age":21}
被视为参数name,而不是value,即您使用开发人员工具看到的内容。
如果你想发送相同的有效负载,你必须这样做
xmlhttp.send('data=' + datas2')
关于jQuery.ajax() 的 Javascript 替代方案 - 面临错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31409013/