前一段時間接觸了JQuery Ajax中的.post()方法和.get()方法,感覺到ajax的簡潔和強大,當用到.post()方法時,去W3上查找相關的使用方法,感覺十分簡單,用法很明了,然后,直接根據自己的需要(js將數據post給php寫入數據庫,然后返回給js一個值)開寫了,寫完了,運行,竟然不行!然后仔細地對比我的代碼和demo的不同,為了查找錯誤,將我的代碼寫的幾乎和demo相同了,但是還是無法在js中獲得php的數據。
這里先回憶一下.post()方法。
jQuery.post(url,data,success(data, textStatus, jqXHR),dataType)
參數 | 描述 |
url | 將請求發送到的url |
data | 發送的數據(可選) |
success(data, textStatus, jqXHR) | 執行成功后的回調函數,參數均可選,data是返回的數據, textStatus是函數的狀態,也可以加入jqXHR得到函數 的返回狀態 |
dataType | 預期的服務器相應的數據類型 |
經過仔細的對比,發現js的代碼已經不能再改了,然后我開始看php的代碼,發現,跟網上唯一不同的是,我增加了一個插入數據庫的操作,難道是這個的原因?我把連接數據庫、插入數據庫的操作通通注釋掉了以后,成功了~~~(必然啊,跟網上的demo不能再一樣了)。
這是為什么呢,然后開始在網上查資料,突然看到了post()函數的時間問題,大體意思是,當我url連接到插入數據庫的php界面時,需要一定的執行時間插入數據庫,當我的click函數執行了,刷新了之后,回調函數還沒有機會執行post就完成了,所以無論我怎么刷新都沒變化。
$.ajax({url:c_url, timeout:3000, success: function(data){alert("aaa");} });
加入超時限制,測試之后,發現function也是能執行的,很明顯是超時的問題。插入數據庫拖慢了post執行成功回調的時間,於是,我將連接數據庫和插入數據庫單獨加入一個新建的php頁面,然后,可以得到數據了。
這是我最后的js代碼:
1 $(document).ready(function(){ 2 $("a").click(function(){ 3 var c_url = 'http://localhost/test/check.php'; 4 var jj; 5 $.post("db.php",{id:"5"}); 6 $.post("check.php",{},function(data){jj=data;$("#tname").html(data);}).success(function() { alert("second success"); }) 7 .error(function(a) { alert("error"+a.ResponseText);alert(json_last_error ()); }) 8 .complete(function() { alert("complete"); }); 9 $("#tname").html(data); 10 }); 11 12 });
其中,check.php只有單獨定義的一個數組返回用於測試是否收到。
至此,算是結束了,不過這樣執行,html方法改變了標簽內容,但是在頁面上顯示一下就突然刷新沒了,還沒有解決。希望各位大神指點~
第一次接觸ajax就碰上了這樣的問題,以后還是要系統地學一下。