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"}'
解释:
我正在尝试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"}'