论坛首页 Web前端技术论坛

jquery ajaxFileUpload插件的 missing } in XML expression错误处理

浏览 8612 次
精华帖 (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) {
          data = data.substring(5, data.length-6);
    }         
    eval("data=" + data);   

 

 

PS: 折腾人这么长时间!!  浏览器兼容问题实在 XXXX 了!!

   发表时间: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 : '正在上传图片,请稍后...'
});
0 请登录后投票
   发表时间:2009-07-03  
我是extjs得formpanel提交好像已经封装啦返回的值
0 请登录后投票
   发表时间: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 对象...
0 请登录后投票
   发表时间:2009-07-07  
看过啦form的submit就是用得这个他是已经封装好的。只能改源代码吗?
0 请登录后投票
   发表时间: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);
    }
});


0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics