解释
我正在尝试POST / PUT以下文字
{"电子邮件":" DD@GMAIL.COM"}
通过 xhttp.send 到外部服务器。我需要用它来发布双引号,但我该怎么做?我读到了关于htmlentities,specialchars et cetera但我仍然在一小时或更长时间后找不到解决方案。当然,这不起作用(因为双引号冲突):
xhttp.send("{"email":"DD@GMAIL.COM"}");
这是迄今为止的脚本:
<!DOCTYPE html>
<html>
<body>
<h1>The XMLHttpRequest Object</h1>
<button type="button" onclick="loadDoc()">Request data</button>
<p id="demo"></p>
<script>
function loadDoc() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("demo").innerHTML = this.responseText;
}
};
xhttp.open("PUT", "http://www.example.com/json", true);
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhttp.setRequestHeader('X-CSRF-Token', "csrf_token");
xhttp.send("fname=Henry"); //TODO: MAKE SURE THAT EXACTLY {"email":"DD@GMAIL.COM"} WILL BE 'POSTED'.
}
</script>
</body>
</html>
请帮助我,我无法弄清楚这一点。
答案 0 :(得分:1)
您可以将字符串换成单引号
xhttp.send('{"email":"DD@GMAIL.COM"}');
但是,最好将其序列化为来自对象的字符串
xhttp.send(JSON.stringify({ email :"DD@GMAIL.COM"}));
此外,您应该发送正确的内容类型标题
xhttp.setRequestHeader("Content-Type", "application/json");
答案 1 :(得分:0)
它是JavaScript,而不是HTML(嗯,它嵌入在HTML中,但在脚本元素中,因此就HTML而言,您只需担心序列</
。)
JavaScript中的转义字符为\
。
xhttp.send("{\"email\":\"DD@GMAIL.COM\"}");
由于您不在数据中使用单引号,您可以使用它们来分隔字符串而不是转义内容:
xhttp.send('{"email":"DD@GMAIL.COM"}');
或者您可以使用JavaScript对象并将其转换为JSON:
var object = {email:"DD@GMAIL.COM"};
var json = JSON.stringify(object);
xhttp.send(json);
...除了
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
JSON的内容类型为application/json
。
答案 2 :(得分:0)
您可以使用单引号将其换行:'{"email":"DD@GMAIL.COM"}'