問題:ajax請求不走回調函數的解決辦法


題目:寫一個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類型,並在服務端指定即可。
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM