2013-02-10 38 views
0
$('#loginForm').submit(function(e){ 

     var $inputs = $(this).find("input"); 
     var serializedData = $(this).serialize(); 
     $inputs.prop("disabled", true); 

     var request = $.ajax({ 
      url: "myurl", 
      dataType: "json", 
      type: "GET", 
      data: serializedData, 
     }); 

     request.done(function (response, textStatus, jqXHR){ 
      $('#loginMessage').text('GOOD'); 
     }); 

     request.fail(function (jqXHR, textStatus, errorThrown){ 
      $('#loginMessage').text('Some error occured. Please try again'); 
      console.error("The following error occured: ",errorThrown,jqXHR); 
     }); 

     request.always(function() { 
      $inputs.prop("disabled", false); 
     }); 
     // prevent default posting of form 
     e.preventDefault();   
    }); 

我新的jQuery和在上面的代码.done块不被执行并萤火控制台显示这样的信息: -JQuery的AJAX完成不执行

GET myurl?userID=aman&password=aman 200 OK,仅为37微秒的jquery ....分钟的.js(线2)

出现下列错误:(空字符串)Object { readyState=0, status=0, statusText="error"}

服务器端脚本

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     String username = request.getParameter("userID"); 
     String password = request.getParameter("password"); 
     System.out.println("GET"); 
     response.setContentType("application/json"); 
     PrintWriter out = response.getWriter(); 
     Gson gson = new Gson(); 
     if(username.equals("aman") && password.equals("aman")){ 
      out.println(gson.toJson(new Boolean("true"))); 
     }else{ 
      out.println(gson.toJson(new Boolean("false"))); 
     } 
     out.close(); 
    } 
+0

检查错误...你为什么得到它? – gdoron 2013-02-10 08:36:22

+2

而不是request.done而失败尝试使用成功和错误,看看jquery ajax api的成功和错误 – Abubakkar 2013-02-10 08:38:15

+0

我已经包括萤火虫控制台日志的问题,无法确定错误,如果有任何其他方法来识别错误,请提到。谢谢 – Aman 2013-02-10 08:44:56

回答

2

可能完成的操作不会被调用,因为失败会被调用。 由于http请求本身似乎已经工作,另一个可能的问题是它没有返回正确的json内容,而回复被解释为这样(因为dataType:“json”)。

因此,您应该调查服务器返回的内容。

5

问题可能是您没有发送完整的JSON。我输出结果从

out.println(gson.toJson(new Boolean("true"))); 

而你得到的只是这个词的真实。尝试改变它是这样的。

HashMap<String, Boolean> hm = new HashMap<String, Boolean>(); 
hm.put("success", true); 
out.write(gson.toJson(hm)); 

运行,我得到{“成功”:true}这是有效的JSON。

+0

仍然.done块不起作用。 – Aman 2013-02-10 10:07:01

0

我不知道为什么,但有时萤火虫断点给人的印象是request.done()中的代码没有执行。也许它只是简单地引导到控制台。

尝试在萤火虫中测试没有断点的代码。