即使在从服务器获得响应后,失败函数也会得到回调

Posted

技术标签:

【中文标题】即使在从服务器获得响应后,失败函数也会得到回调【英文标题】:Failure Function is getting callback even after getting response from server 【发布时间】:2014-11-23 18:15:27 【问题描述】:

当我提交我的 servlet 的表单时,我有一个包含两个文本字段用户名和密码的表单 成功调用并正确发送响应。但是在提交方法失败被调用。

这是我的代码。

                                    form.submit(
                                                   success: function(form, action) 
                                                       console.log(action);
                                                       alert("Success");
                                                   ,
                                                    failure: function(form, action) 
                                                        console.log(action);
                                                        alert("fail");
                                                    

                                               );

我的 Servlet 代码。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
 response.setContentType("text/html");
 PrintWriter out=response.getWriter();
 JSONObject obj=new JSONObject();
 try 
    obj.put("sucess",true);
    out.print(obj.toString());
 catch (JSONException e) 
    // TODO Auto-generated catch block
    e.printStackTrace();



但是如果我用 Ext.Ajax 替换了 form.submit,那么成功函数就会被成功调用。

 Ext.Ajax.request(
                                                   url:"login",
                                                    success: function(result, request) 
                                                        alert("success");
                                                       ,
                                                        failure:function(response)
                                                            alert("failure");
                                                         console.log(response);
                                                        
                                                  );

为什么 form.submit 不能正常工作??

注意:我没有在服务器端进行任何身份验证,我的目的是检查我是否能够从服务器获得 json 响应,对于 Ext.Ajax.Request 我没有发送参数。

【问题讨论】:

【参考方案1】:

尝试检查什么类型的错误,以便为您提供一些解决问题的方向,例如:

failure: function(form, action) 
    switch (action.failureType) 
        case Ext.form.action.Action.CLIENT_INVALID:
            Ext.Msg.alert('Failure', 'Form fields may not be submitted with invalid values');
            break;
        case Ext.form.action.Action.CONNECT_FAILURE:
            Ext.Msg.alert('Failure', 'Ajax communication failed');
            break;
        case Ext.form.action.Action.SERVER_INVALID:
           Ext.Msg.alert('Failure', action.result.msg);
   

【讨论】:

是的,格式相同,正如我所说,它适用于 ext.ajax 请求 抱歉 - 意思是发表评论,而不是回答 - 您没有使用 standardSubmit: true 配置表单吗?否则,可能会解析并在发回的操作对象中找到响应 - 用有关如何执行此操作的详细信息更新我的答案。【参考方案2】:

发现问题

我从头到尾都犯了一个错误,在讨论我的问题之前,我只想解释一下 form.submit(success,failure) 将在服务器 json 响应上工作,该响应是成功键,但 Ajax.request 使用请求的响应代码而不是 success: true/false 来确定调用哪个处理程序。

在下面的代码中,在构建 json 对象时,我成功犯了一个拼写错误

try 
obj.put("sucess",true);
out.print(obj.toString());
 

在将成功更正为成功后,我在 form.submit 中的成功函数被成功调用。

【讨论】:

以上是关于即使在从服务器获得响应后,失败函数也会得到回调的主要内容,如果未能解决你的问题,请参考以下文章

即使服务器的主机密钥存在于 known_hosts 文件中,JSch 连接也会因 UnknownHostKey 而失败

如何使用 .load jQuery 获得响应

验证失败,因为远程方在从 web 服务获取响应时关闭了传输流异常

即使设置了 cookie,RabbitMQ 身份验证也会失败

NSURLConnection 即使在重置授权标头后也会返回缓存的响应

即使服务器出错,Sencha extjs model.erase 也会删除模型