当前位置: 首页 > 图文教程 > 网络编程 > AJAX技术 > AJAX 异步传输数据的问题

AJAX技术
AJAX快速入门之HTTP协议基础
使用AJAX的十大理由
用Oracle JDeveloper 10.1.3构建Ajax应用程序
用AJAX+J2EE实现一个网上会议室系统
AJAX在VS2005中的简单应用
用AJAX编写一个简单的相册
利用AJAX技术提高搜索引擎排名
在ASP.NET中使用AJAX的简单方法
AJAX和Web开发新技术:Dynamic Faces
开发保留标准浏览器功能的AJAX应用程序
AJAX编程实践之与服务器通信
AJAX并不神秘:揭密各种AJAX控件和类库
使用AJAX技术构建更优秀的Web应用程序
使用GWT开发AJAX应用程序
为AJAX应用程序构建一个错误提交系统
总结AJAX相关JS代码片段和浏览器模型
全面剖析XMLHttpRequest对象
独立的思想 由AJAX应用引发的深思
一款经典的ajax登录页面 后台asp.net
ajax 调用后台方法大家可以讨论下

AJAX技术 中的 AJAX 异步传输数据的问题


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 52 ::
收藏到网摘: n/a

暂时把script中的‘+’都用‘-’代替,index += 1;改成index -= -1;呵呵,以后有人看到这段自动生成的诡异脚本,不知道会作何感想,但现在也只能如此。 要异步传输的数据:
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;呵呵,以后有人看到这段自动生成的诡异脚本,不知道会作何感想,但现在也只能如此。