浏览 8608 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (7) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-06-11
最后修改:2010-11-30
最近使用jQuery的ajaxFileUpload插件来做ajax文件上传。文件上传没有遇见问题,但是接受从服务器端响应的json总是报SyntaxError: missing } in XML expression的错误.. 起初IE和FireFox都报.. 后来只有firefox报错..
之后使用firedebug跟踪了一下返回的数据, 发现responseText中被加上了<pre></pre>标签... 但是在IE中没有<pre>标签。 很有可能是<pre></pre>惹的祸..
在调用eval前添加如下代码,将<pre></pre>去掉,问题搞定!
if(data.indexOf('<pre>') != -1) {
PS: 折腾人这么长时间!! 浏览器兼容问题实在 XXXX 了!! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-07-03
我这样写怎么还有错误啊。跟你的问题一样啊。
form.getForm().submit({ success : function() { // if (action.indexOf('<pre>') != -1) { // action = action.substring(5, action.length - 6); // } // eval("action=" + action); Ext.Msg.alert('友情提示 ', '图片上传成功'); }, failure : function() { // if (action.indexOf('<pre>') != -1) { // action = action.substring(5, action.length - 6); // } // eval("action=" + action); Ext.Msg.alert('友情提示', action.result.message); }, waitMsg : '正在上传图片,请稍后...' }); |
|
返回顶楼 | |
发表时间:2009-07-03
我是extjs得formpanel提交好像已经封装啦返回的值
|
|
返回顶楼 | |
发表时间:2009-07-05
379548695 写道 我这样写怎么还有错误啊。跟你的问题一样啊。 form.getForm().submit({ success : function() { // if (action.indexOf('<pre>') != -1) { // action = action.substring(5, action.length - 6); // } // eval("action=" + action); Ext.Msg.alert('友情提示 ', '图片上传成功'); }, failure : function() { // if (action.indexOf('<pre>') != -1) { // action = action.substring(5, action.length - 6); // } // eval("action=" + action); Ext.Msg.alert('友情提示', action.result.message); }, waitMsg : '正在上传图片,请稍后...' }); 好久没用过原生Ext JS了... 今天查了一下 API.. 你看以看看 Ext.Ajax.Request 这个方法,Form表单的提交实际上就是用这个方法进行的.... 在回调函数中可以直接操纵 XMLHttpRequest 对象... |
|
返回顶楼 | |
发表时间:2009-07-07
看过啦form的submit就是用得这个他是已经封装好的。只能改源代码吗?
|
|
返回顶楼 | |
发表时间:2009-07-07
379548695 写道 看过啦form的submit就是用得这个他是已经封装好的。只能改源代码吗?
我知道封装好了.. Form表单的提交,其实是调用了Ext.Ajax.request 这个方法,你可以用这个方法来发送请求... 跟调用Submit效果是一样的。。 关于Form工作原理方面的你可以看我之前写的《Ext JS Form提交数据总结》这篇文章... Form提交实际上是调用的下面这部分代码,这部分代码可以在Ext.form.Action找到, 应该是256行(我的Ext JS版本是 2.2) Ext.form.Action.Submit = function(form, options){ Ext.form.Action.Submit.superclass.constructor.call(this, form, options); }; Ext.extend(Ext.form.Action.Submit, Ext.form.Action, { /** * @cfg {Ext.data.DataReader} errorReader <b>Optional. JSON is interpreted with no need for an errorReader.</b> * <p>A Reader which reads a single record from the returned data. The DataReader's <b>success</b> property specifies * how submission success is determined. The Record's data provides the error messages to apply to any invalid form Fields.</p>. */ /** * @cfg {boolean} clientValidation Determines whether a Form's fields are validated * in a final call to {@link Ext.form.BasicForm#isValid isValid} prior to submission. * Pass <tt>false</tt> in the Form's submit options to prevent this. If not defined, pre-submission field validation * is performed. */ type : 'submit', // private run : function(){ var o = this.options; var method = this.getMethod(); var isGet = method == 'GET'; if(o.clientValidation === false || this.form.isValid()){ Ext.Ajax.request(Ext.apply(this.createCallback(o), { form:this.form.el.dom, url:this.getUrl(isGet), method: method, headers: o.headers, params:!isGet ? this.getParams() : null, isUpload: this.form.fileUpload })); }else if (o.clientValidation !== false){ // client validation failed this.failureType = Ext.form.Action.CLIENT_INVALID; this.form.afterAction(this, false); } }, // private success : function(response){ var result = this.processResponse(response); if(result === true || result.success){ this.form.afterAction(this, true); return; } if(result.errors){ this.form.markInvalid(result.errors); this.failureType = Ext.form.Action.SERVER_INVALID; } this.form.afterAction(this, false); }, // private handleResponse : function(response){ if(this.form.errorReader){ var rs = this.form.errorReader.read(response); var errors = []; if(rs.records){ for(var i = 0, len = rs.records.length; i < len; i++) { var r = rs.records[i]; errors[i] = r.data; } } if(errors.length < 1){ errors = null; } return { success : rs.success, errors : errors }; } return Ext.decode(response.responseText); } }); |
|
返回顶楼 | |