我有一个输入字段接受大学名称,还有一些其他输入字段用于其他用途。
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> at Object.parse (native)<br> at server.js:206:28<br> at Layer.handle [as handle_request]
我希望它接受所有输入字段,无论其内部是什么。
答案 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
标题,一切顺利。