4

我有一个表单,它是这样提交的:

form.submit({
                url: '/postme',
                waitMsg: 'Loading...',
                method: 'POST',
                success: function (form, action) {
                   console.log(action.response.responseText);                                   
                }
            });

但!在回答我没有财产success: true并且无法设法添加它的主要事情。有没有办法在Ext.Ajax.requestcallback中制作类似参数的东西, 而不是?或者也许有办法告诉 form.submit() 它必须在其他响应参数中检测到成功?success

顺便说一句:a 不能使用 Ext.Ajax.request 因为我必须从表单(文件上传)传递多部分数据。

提前致谢。

4

3 回答 3

10

API解释说,您必须通过才能success: true调用成功处理程序。这是该submit方法的文档

@param {Object} options 传递给动作的选项(详见 Ext.form.Basic.submit 和 Ext.form.Basic.doAction )

if (form.isValid()) {
    // Submit the Ajax request and handle the response
    form.submit({
        success: function(form, action) {
            Ext.Msg.alert('Success', action.result.message);
        },

        // If you don't pass success:true, it will always go here
        failure: function(form, action) {
            Ext.Msg.alert('Failed', action.result ? action.result.message : 'No response');
        }
    });
}

如果您想使用不同的属性来指示错误,您应该查看http://docs.sencha.com/extjs/4.2.0/#!/api/Ext.form.Basic-cfg-errorReader,您可以配置 errorReader 以根据需要读取您的属性。

您还可以将成功和失败处理程序都路由到同一个地方,并从处理程序中确定它

一定要设置standardSubmit:true它不会被 AJAX 提交

让您的代码感觉不那么脏的示例解决方案

Ext.define('ns.my.CustomReader', {
    extend: 'Ext.data.reader.Reader', 
    alias: 'reader.ns-customreader',
    read: function(xhr) 
         var resp = Ext.JSON.decode(response.responseText, true);
         // Handle the case where response is not JSON too (unhandled server errror?)
         return {success: resp ? !!resp.id : false};
    }
});

然后,当您创建表单时,您可以使用

 form : {
     errorReader: 'ns-customreader'
 }

我还注意到您没有返回记录,读者应该根据文档执行此操作,可能只是您不需要它,但最好满足接口以使您的代码保持一致使用 Ext-JS

errorReader 不必是 Reader 的完整实现。它只需要实现一个 read(xhr) 函数,该函数在具有以下结构的对象中返回一个记录数组:

{ records: recordArray } // I think it needs success: boolean also.
于 2013-04-23T15:36:55.730 回答
0

如果你不发送success: true它显然会失败。因此,在类似于此的失败回调函数中处理您的参数,您的替代方法successstatus

form.submit({
    url: '/postme',
    waitMsg: 'Loading...',
    method: 'POST',
    success: function (form, action) {
        console.log(action.response.responseText);                                   
    },
    failure: function(form, action) {
        if (action.result.status == true) {
            console.log('success!');
        }
    }
});
于 2013-04-24T13:34:58.097 回答
0

除了@Juan Mendes 的回答,我发现以下条件必须为真:

在服务器端

  • 正确的 json 需要有一个成功 true : {"success":true}
  • 返回的 contentType 必须设置为text/html

这适用于 extjs-3.4.0 版本

请看:为什么extjs表单提交中没有调用成功回调?

这节省了我很多时间,我希望它可以帮助别人。

于 2017-03-23T15:21:03.427 回答