JavaScript 使用 JSON 数据进行 HTTP POST 请求

9

我能按照下面的方式发送请求吗?参数采用JSON格式对象进行分配。但我只得到了错误信息。但是当我使用REST客户端并选择RAW数据时,它可以正常运行。我猜想我一定是写错了代码。如何在JavaScript中发送原始JSON数据?有人能帮我吗?

xmlhttp = new XMLHttpRequest();
var url = "https://someURL";
xmlhttp.open("POST", url, true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.onreadystatechange = function () { //Call a function when the state changes.
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        alert(xmlhttp.responseText);
    }
}
var parameters = {
    "username": "myname",
    "password": "mypass"
};
// Neither was accepted when I set with parameters="username=myname"+"&password=mypass" as the server may not accept that
xmlhttp.send(parameters);

12
“JASON”指的是“JSON”吗? - ajp15243
1
@ajp15243 显然... - ddavison
1
你需要将它转换为字符串 JSON.stringify,进行编码,然后发送请求。 - epascarello
2
请注意,这不是“JSON风格”的对象,也不是JSON数据。它是创建对象的对象字面量。 - Felix Kling
1
使用浏览器控制台检查您的流量,以查看发送了什么内容。 - Janus Troelsen
2个回答

22
不可以。send()方法可以接受多种不同类型的参数, 但是纯对象不在此列(因此它最终可能会调用toString()并被转换为"[Object object]")。
如果你想发送JSON,则必须:
  1. 说明你正在发送JSON:xmlhttp.setRequestHeader("Content-type", "application/json");
  2. 将JavaScript对象转换为JSON文本字符串:var parameters = JSON.stringify({"username":"myname","password":"mypass"});
  3. 准备好在服务器端接受JSON而不是应用程序/x-www-form-urlencoded数据。

请注意,由于您使用的是绝对URI,因此可能会遇到跨域问题


3
xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST", AjaxURL, true);
xmlhttp.onreadystatechange = function () { //Call a function when the state changes.
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
cb(xmlhttp.responseText);               
}
};
xmlhttp.send(JSON.stringify(Idata)); 

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