JavaScript&在一个字符串内

时间:2016-08-14 12:18:31

标签: javascript json

我有一个输入字段接受大学名称,还有一些其他输入字段用于其他用途。

1)接下来,我正在创建一个包含所有这些输入和

的JSON结构

2)为此JSON数据执行JSON.Stringify(JSONdata)。

3)将XHR内容类型标题设置为:

xhr.setRequestHeader("Content-Type", "application/X-www-form-urlencoded");

使用此字符串化输入向服务器调用post请求。

一切都运行正常,除了这一个特定的大学输入看起来像这样:

St. Joseph's College of Arts & Science, Cityname.

在服务器端解析数据后,我希望服务器上的字符串看起来像这样:

"college":"St. Joseph\'s College of Arts & Science, Cityname",

相反它看起来像:

"college":"St. Joseph\'s College of Arts ',' Science, Bangalore",

&,取代,从而引发错误:

: Unexpected end of JSON input<br> &nbsp; &nbsp;at Object.parse (native)<br> &nbsp; &nbsp;at server.js:206:28<br> &nbsp; &nbsp;at Layer.handle [as handle_request] 

我希望它接受所有输入字段,无论其内部是什么。

2 个答案:

答案 0 :(得分:1)

您只需对要发送的字符串进行URI编码,就像您通过您手动创建的URI编码表单数据发送字符串一样:

var data = "Data="+encodeURIComponent(JSON.stringify(requestObject));
// ----------------^^^^^^^^^^^^^^^^^^^----------------------------^
xhr.setRequestHeader("Content-Type", "application/X-www-form-urlencoded");
xhr.send(data);

&在URI编码方面很特别(和其他几个字符一样)。 encodeURIComponent确保对其进行正确编码,以便在另一端进行传输和解码。解码后,您可以使用在您的环境中使用的任何JSON解析器将JSON(字符串)转换为对象结构。

答案 1 :(得分:0)

您正在发送JSON,但提供标准<form>的内容类型。在表单中,&用于分隔键值对。

告诉服务器你给它一件事,然后给它另一件事,只会导致痛苦。

传递正确的application/json标题,一切顺利。