欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

AJAX 异步传输数据的问题

程序员文章站 2022-03-31 14:01:29
要异步传输的数据: xml代码 .... ...
要异步传输的数据:
xml代码
....
<action xsi:type="basic:javascript" script="index += 1;"/>
....
ajax异步传输代码:
js代码
复制代码 代码如下:

var postdata = "input="+ escape(inputjson) +"&script="+escape(xml)+
"&feedgeneral=" + escape(feedgeneral);
xmlhttprequest.open("post",url,true);
xmlhttprequest.setrequestheader("content-type","application/x-www-form-urlencoded");
xmlhttprequest.send(postdata);

postdata在encode和unencode,最终导致在后台servlet中得到得到数据+被空格代替,使得script中的index += 1;变成了index = 1;从而导致后台java代码在跑script出现死循环。
在网上搜索,发现content-type使用application/x-www-form-urlencoded后:
[来自http://www.w3.org/tr/html401/interact/forms.html#h-17.13.4.1]写道
复制代码 代码如下:

control names and values are escaped. space characters are replaced by `+', and then reserved characters are escaped as
described in [rfc1738], section 2.2: non-alphanumeric characters are replaced by `%hh', a percent sign and two hexadecimal
digits representing the ascii code of the character. line breaks are represented as "cr lf" pairs (i.e., `%0d%0a').

然而使用form来提交方式来发起request却不会出现类似的问题,而form默认的content-type也是application/x-www-form-urlencoded:
js代码
复制代码 代码如下:

$('test').innerhtml = "<form target='_blank' id='test_form' action='./gen_feed' method='post'>"
+ "<input type='text' name='input' /><input type='text' name='script' />"
+ "<input type='text' name='feedgeneral' /><input type='hidden' name='format' value='" + this.feed_type + "'
/>"
+ "<input type='submit' value='gen' /></form>";
var test_form = $('test_form');
test_form.elements[0].value = inputjson;
test_form.elements[1].value = script;
test_form.elements[2].value = feedgeneral;
test_form.submit();

仍未发现问题到底出在何处,暂做备忘。暂时把script中的‘+'都用‘-'代替,index += 1;改成index -= -1;呵呵,以后有人看到这段自动生成的诡异脚本,不知道会作何感想,但现在也只能如此。