2017-07-02 93 views
0

說明:PUT/POST雙引號沒有逃逸到外部服務器

我想POST/PUT以下文本

{ 「電子郵件」: 「[email protected]」}

via xhttp.send到外部服務器。我需要來發布雙引號,但我該怎麼做?我閱讀了關於性能,特點等等,但我仍然在一個小時或更長時間後找不到解決方案。當然,這是行不通的(因爲雙引號的衝突):

xhttp.send("{"email":"[email protected]"}"); 

這是劇本到現在爲止:

<!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":"[email protected]"}  WILL BE 'POSTED'. 
} 
</script> 

</body> 
</html> 

請幫助我,我不知道這一點。

+0

轉義它們或使用單引號作爲分隔符 –

回答

1

你可以用單引號

xhttp.send('{"email":"[email protected]"}'); 

但是字符串,最好把它從一個對象序列化到一個字符串

xhttp.send(JSON.stringify({ email :"[email protected]"})); 

你也應該發出正確的Content-Type頭

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

'JSON.stringify'是要走的路。比通過轉義或引用手動製作JSON要好得多。 – randomir

0

它是JavaScript,而不是HTML(當然,它嵌入在HTML中,但在腳本元素中,因此就HTML而言,您只需要擔心順序</)。

JavaScript中的轉義字符是\

xhttp.send("{\"email\":\"[email protected]\"}"); 

既然你不要在數據使用單引號,你可以用它們來分隔字符串,而不是逃避內容:

xhttp.send('{"email":"[email protected]"}'); 

或者你可以使用JavaScript對象,並將其轉換以JSON:

var object = {email:"[email protected]"}; 
var json = JSON.stringify(object); 
xhttp.send(json); 

除了...

xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 

的內容類型爲JSON是application/json