IE下使用jquery ajax失效的原因總結

本文章總結了IE下使用jquery ajax失效的原因和一些解決辦法,有需要的朋友可參考一下本文章。

1,然後各種調試,最後發現:把ie把關了,再打開$.get()。會調用,再第二次調用的用的時候發現又不行了。于是我推斷是ie緩存的問題,把ie緩存清除後,果然可以了。但是客戶不可能知道清理緩存。所以只能自己想辦法了

在網上發現各大朋友都給了個方法就是用jquery自帶的方法:

代碼如下

$.ajaxSetup({cache: false });

另外還有分析是,ie是根據請求的url是不是一樣來是否發送請求,對于同一請求,ie只發送一次http請求,所以同一請求發送多次,但ie實際是不會發送的。

有了這個原因:那麽就好辦了,可以在url後面加個時間戳。

代碼如下
$.get(
"imgsUpload",
{imgsPath:path,<SPAN style="COLOR: #333399">timeStamp: new Date().getTime()</SPAN>},
function(data){

}
);

2,以下問題就是個人問題了,但是請求是能發送到後台了,並且也執行了,也返回了.但是不能執行ajax的回調方法。

但在其它浏覽器是正的。分析返回來過來的data,發現亂七八糟的。那就是返回時的數據類型不對,我返回的json,但是我想都是以字符串形式返回的,所以我在伺服器端有如下代碼:

代碼如下
<SPAN style="COLOR: #333399">response.setContentType("text/plain;charset=UTF-8");
</SPAN>

ff,chrome是正常的,但是ie去只能把識別爲text,不能解析成json,所有沒有調用json方法

經過測試發現,可以不用設置消息頭,當然要設置也是可以的,但是不是text/plain,而是:

response.setContentType("application/json;charset=UTF-8");


jquery ajax在IE下失效

有個頁面需要用jquery的ajax獲取數據,在chrome和ff下都能正確獲取並顯示數據,代碼段如下:

代碼如下

$.ajax({


url: "/item/getComments",

dataType: "json",

data: {"iid": "123456", "nick": "xlight"},

success: function (data) {

$(".comments-total").html(data.total);

$(".comments-body").html(data.list);

}

});

用IE自帶的debug工具查看,顯示數據已經成功獲取(status:200並有數據返回),那就奇怪了……

給ajax加上error回調:

代碼如下


$.ajax({


url: "/item/getComments",

dataType: "json",

data: {"iid": "123456", "nick": "xlight"},

success: function (data) {

$(".comments-total").html(data.total);

$(".comments-body").html(data.list);

},

// 這裏三個參數詳細請看jquery手冊

error: function (a, b, c) {

alert(c);

}

});

IE顯示錯誤“Error:c00ce56e”之類的信息,google了下,大致了解到這是IE無法解析數據的原因,絕大多數是因爲header中有畸形編碼導致的。

知道了原因排查起來也就容易了,用IE的debug工具看了下返回數據的header,有“Content-Type text/html; charset=utf8”,可以看出這裏應該是utf-8,找到後端代碼改之(header發送函數,如php的header()),刷新就ok了!

其它問題

1) Apache URLRewrite等伺服器級別的轉向支持。如可以把test.js?folder=/js/解析爲/js/test.js。
2) Javascript和HTML,圖片一樣,作爲靜態文件會被浏覽器緩存。後面加個隨機數,能保證每次請求都是新文件 ,如common.js?t=12442344。
3) 這個參數是供整體頁面中查詢js的參數所用,屬js外部應用,但絕對不是供js的內部應用。如你有一個html頁面,裏面寫上一段:
<script type="text/javascript" src="test.js?a=100&b=2"></script>
首先,這個?a=100&b=2是絕對不會影響到test.js的內部函數執行的,因爲test.js無法接收到這個參數。
其次,這個?a=100&b=2是可以通過html中的DOM結構訪問到這個js路徑。如下例:
var Xsrc = document.getElementsByTagName("script")[document.getElementsByTagName("script").length-1].src
此時Xsrc能得到test.js?a=100&b=2,然後通過正則表達式的方法來解析出這些參數:a=100及b=2。然後你拿這兩個參數實現一些判斷。
最後,回頭來看看文首的?jsver=2.1.1.3626.0,第一種肯定是不可能的,不是每一種伺服器都支持URLRewrite的。我覺得這個性質介于第二種和第三種之間。沒覺得jsver=2.1.1.3626.0有什麽實用的,頂多用來判斷是什麽版本,但這個版本號本來就是從PHP代碼中得到的。我覺得這個參數多半是象征性的,沒啥實際用處。

更多相關文章
  • ajax與jquery.ajax中文參數post傳遞亂碼處理方法今天在做專案時,需要用到Ajax,之前我在用GET方式傳遞中文參數時,只需要在後台程序中設置頁面編碼爲GB2312即中文能正常顯示,可是這次由于表單專案較多,不適合用GET方式傳遞,只能用POST方式,但發現後台程序中設置編碼爲GB23
  • 文章分享一篇關于利用了jquery的ajax 來訪問wcf 伺服器,同時支持GET.POST.PUT.DELETE等常用的訪問方法,後面一個實例介紹了跨域訪問WCF有需要了解的同學可以看看. 代碼如下 using jquery ajax call wcf service get/post/put/d
  • 下面我們一起來看一個php+jquery Ajax異步上傳圖片(ajaxSubmit)實例,這個我們真正的利用了ajax而不是使用iframe之類的哦.效果如下 代碼如下 index.php文件php結合jquery
  • 在jquery中ajax可以分類爲$.ajax $.get $.post $.getJSON $.getScript幾種了,下面我都找了一些實例分享給大家,估計大家看了之後覺得jquery ajax真簡單.什麽是 AJAX?AJAX = Asynchronous JavaScript and XML
  • 今天發現在使用jquery ajax.post提交數據時會發現數據在ff正常,但在chrome與ie浏覽器中post過去的數據全部是亂碼了,出現亂碼多半是編碼問題了,下面小編來給大家分析一下解決辦法.在用jquery
  • 在jquery的ajax中getscript是一個可實現跨域載入獲取數據的功能,下面我來給大家介紹一些關于getscript用法與可能碰到的問題解決辦法.爲 $.getScript() 添加緩存開關 代碼如下 // add cache control to getScript method(func ...
  • 文章是講一下關于jquery ajax插件,來實例利用$.post php發送數據給mysql查詢出的數據再返回給jquery進行處理,如下實例.<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" & ...
  • 本文章分享一個現在最新的jquery ajax 和jquery ztree這兩個東西在實現應用中的一些問題解決辦法,有需要了解的朋友可以參考一下.因爲以前自己也摸索過jquery ajax,但是還是實際專案卻用的少,開始還以爲不會遇到很多問題,結果卻讓我頭疼呵呵,大大小小的問題,讓我當初有砸滑鼠的問
一周排行