題目:寫一個ajax請求,去后台取一個整數,並顯示到頁面文本框中。要求該整數值1秒鍾刷新1次。
原因:服務端返回值類型與ajax回調函數返回值類型不一致
分析如下:
前台:
1 $(document).ready(function(){ 2 setInterval("getVal()",1000); //1秒鍾刷新一次 3 }); 4 function getVal(){ 5 $.post("/TestServlet/random",{}, function(resultObj){ 6 alert(1); 7 }, "json"); 8 }
后台:
response.setContentType("text/html;charset=utf-8");
try {
response.getWriter().write("{'val':"+new java.util.Random().nextInt(900)+"}");
response.getWriter().flush();
response.getWriter().close();
} catch (IOException e) {
e.printStackTrace();
}
代碼大至如上,服務端有返回值,http status為200,按道理來說處理已經正常結束了,但就是不走回調函數。后來使用全參的ajax請求,確實出現了"調用ajax請求出錯"的提示。
$.ajax({ type:"post", url:"/TestServlet/random", data:null, dataType:"text", beforeSend: function(XMLHttpRequest){}, success:function(data){alert(data["operateMessage"]);}, complete:function(XMLHttpRequest,textStatus){}, error:function(message){ alert("調用ajax請求出錯"); alert(message);} });
再經過斷點查看詳細,發現返回值類型指定錯誤。服務端返回的mime類型為"text/html",而回調函數指定的為"json",修改代碼如下,問題解決:
$(document).ready(function(){ setInterval("getVal()",1000); //1秒鍾刷新一次 }); function getVal(){ $.post("/TestServlet/random",{}, function(resultObj){ alert(1); }, "text"); //就是這里的類型與服務端指定不匹配,造成ajax請求出錯。如果想在服務端返回json類型,請到<%tomcat%>\conf\web.xml文件中尋找json對應的MIME類型,並在服務端指定即可。 }
