PUT/POST 不转义到外部服务器的双引号

PUT/POST Double Quotes without escaping to external server

解释:

我正在尝试POST/PUT以下文字

{"email":"DD@GMAIL.COM"}

通过 xhttp.send 到外部服务器。我 需要 到 post 双引号,但我该怎么做?我阅读了 htmlentities、specialchars 等等,但在一个小时或更长时间后,我仍然找不到解决方案。当然,这行不通(因为双引号冲突):

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>

请帮帮我,我想不通。

它是 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

您可以将字符串用单引号括起来

xhttp.send('{"email":"DD@GMAIL.COM"}');

但是,最好将其序列化为来自 object

的字符串
xhttp.send(JSON.stringify({ email :"DD@GMAIL.COM"}));

你也应该发送正确的 content-type header

xhttp.setRequestHeader("Content-Type", "application/json"); 

可以用单引号括起来:'{"email":"DD@GMAIL.COM"}'