1. 程式人生 > >關於jquery1.3.1,IE7,IE8中無法使用ajax的討論?

關於jquery1.3.1,IE7,IE8中無法使用ajax的討論?

大家好,最近使用jquery的ajax功能,但是發現$.ajax()方法不能提交到後臺,我是用的是IE7,
其他方法如get和post沒有試過,但由api所知底層都是用ajax方法來實現的。

通過檢視原始碼發現

// Create the request object; Microsoft failed to properly
// implement the XMLHttpRequest in IE7, so we use the ActiveXObject when it is available
// This function can be overriden by calling jQuery.ajaxSetup
xhr:function(){
 return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
},

以下是這個jquery的原始碼的版本宣告

/*!
 * jQuery JavaScript Library v1.3.1
 * http://jquery.com/
 *
 * Copyright (c) 2009 John Resig
 * Dual licensed under the MIT and GPL licenses.
 * http://docs.jquery.com/License
 *
 * Date: 2009-01-21 20:42:16 -0500 (Wed, 21 Jan 2009)
 * Revision: 6158
 */

上述xhr的建立程式碼位置大概是行數為3259的位置,
通過一個html列印“window.ActiveXObject ”的結果可以知道IE6、IE7和IE8都是返回的true,
測試的html原始碼為(同一個目錄下有一個名為index.jsp頁面,內容無所謂。)
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "

http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>Insert title here</title>
  <script type="text/javascript" src="javascript/jquery.js"></script>
  <script type="text/javascript">
   $(function (){
    $.ajax({
     
url:"index.jsp
",
     success:function(){alert("success")},
     error:function(){alert("error")}
     });
    //$("div").append("<font color='red'>window.ActiveXObject:</font>");
    //$("div").append((window.ActiveXObject?"true":"false"));
    //alert(typeof(new XMLHttpRequest()));
    //alert(typeof(new ActiveXObject("Msxml2.XMLHTTP.4.0")));
    //alert(typeof(new ActiveXObject("Msxml2.XMLHTTP")));
    //alert(typeof(new ActiveXObject("Microsoft.XMLHTTP")));
   });
  </script>
 </head>
 <body>
  <div></div>
 </body>
</html>

情況一:
不修改原始碼,則IE6中可以彈出“success”的提示,而IE7卻沒有任何提示,連錯誤提示都沒有。

情況二:
將原始碼中的
window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
修改為
window.ActiveXObject ? new XMLHttpRequest() : new XMLHttpRequest();
則IE7中是彈出“success”的提示,而IE6卻提示js錯誤,詳情大概為”XMLHttpRequest物件未定義“

兩種情況下FireFox都可以正常提示“success”,版本是FireFox3.5.3,其他瀏覽器不知道。

由此可見IE7中需要使用new XMLHttpRequest()初始化ajax物件,IE6則使用new ActiveXObject("Microsoft.XMLHTTP")

但是jQuery原始碼中卻沒有對IE7的初始化方法進行相容,而官網上的相容說明是IE6+。
難道是我理解錯誤,還是其他的什麼?希望大家給點意見,jQuery很好用,但是我不能要求客戶必須用IE6,而放棄IE7啊!


最後多一句:
prototype最新版1.6.1也是同樣的問題IE7下的Ajax.Request是沒有作用的,需要將原始碼的1130行左右的
var Ajax = {
  getTransport: function() {
    return Try.these(
      function() {return new XMLHttpRequest()},
      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
      //function() {return new ActiveXObject('Msxml2.XMLHTTP.4.0')},
      function() {return new ActiveXObject('Microsoft.XMLHTTP')}
    ) || false;
  },
進行修改,註釋的那個部分是需要新增的修改。
這樣才可以在IE7下使用這個ajax請求方法。
可是大家粗略的看一下,這裡面的ajax初始化是先使用new XMLHttpRequest()建立,那就是說,
如果我不修改的話IE7應該也是可以的。

注:最後這個多一句的IE7相容辦法是在網路上搜索到的


以上就是我今天研究的結果,弄的我很糊塗,到底這個IE6、IE7和IE8全面相容的jQuery的到底怎麼實現(不能影響FireFox等等哦)
如果結論是:
由此可見IE7中需要使用new XMLHttpRequest()初始化ajax物件,IE6則使用new ActiveXObject("Microsoft.XMLHTTP")
那麼prototype中的又怎麼解釋?

我已經糊塗了,希望大家指點一二!

剛才又搜尋了一下關於XMLHttpRequest的建立方法,最後將原始碼修改為

return window.XMLHttpRequest? new XMLHttpRequest() : window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();

則IE6/7/8和FF都可以運行了。

總算是解決了。

相關推薦

關於jquery1.3.1IE7,IE8無法使用ajax的討論?

大家好,最近使用jquery的ajax功能,但是發現$.ajax()方法不能提交到後臺,我是用的是IE7,其他方法如get和post沒有試過,但由api所知底層都是用ajax方法來實現的。 通過檢視原始碼發現 // Create the request object; Mic

vs2012+Qt5.3.1xp系統無法運行靜態編譯失敗

ips use left ucd rdl wpf one amp oai 8w剄19PFV囤衛5http://huiyi.docin.com/ogudb55786 kw覆97X技蘊1倜A澈慫http://shequ.docin.com/sina_5850645250 0

在python3.6.3windows系統最後成功安裝aiohttp==1.3.3

在python3.6.3下,windows系統中最後成功安裝’aiohttp==1.3.3’的步驟如下: 1.pip install multidict 2.pip install chardet 3.pip install yarl==0.9.8 4.pip ins

hbase java api樣例(版本1.3.1新API)

quorum desc color -i arraylist byte logs sin fig 驗證了如下幾種java api的使用方法。 1.創建表 2.創建表(預分區) 3.單條插入 4.批量插入 5.批量插入(寫緩存) 6.單條get 7.批量get 8.簡單sca

怎麽用css hack處理各瀏覽器兼容IE6IE7,IE8,IE9/ FF

過濾 提醒 fire 混亂 不一致 rst 位置 兼容性問題 sina 第一:什麽事瀏覽器兼容性   瀏覽器兼容性問題又被稱為網頁兼容性或網站兼容性問題,指網頁在各種瀏覽器上的顯示效果可能不一致而產生瀏覽器和網頁間的兼容問題。在網站的設計和制作中,做好瀏覽器兼容,才能夠讓網

VS2010+Opencv2.3.1例程實現 筆記之模板匹配

2011-10-04 10:22 VS2010+Opencv2.3.1,例程實現   020 Template Matching   成功程式:

(轉)如何在ie6/ie7/ie8實現iframe背景透明

最近做了一個專案,涉及到ie8iframe背景透明的問題,做了老半天,才把它搞定的,現在把我的經歷貼出來和大家分享: 眾所周知的根據W3C CSS 2.1 規範規定,''''background-color'''' 特性的預設值為 ''''transparent''''

給定一個正整數k(3≤k≤15),把所有k的方冪及所有有限個互不相等的k的方冪之和構成一個遞增的序列例如當k=3這個序列是: 1,3,49101213… (該序列實際上就是:3^0,3^1,3^0+3^1,3^2,3^0+3^2,3^1+3^2,3^0+3^1+3^2…) 請你求

只有1行,為2個正整數,用一個空格隔開: k N (k、N的含義與上述的問題描述一致,且3≤k≤15,10≤N≤1000)。  計算結果,是一個正整數(在所有的測試資料中,結果均不超過2.1*10^9)。(整數前不要有空格和其他符號)。 #include<stdio.h> int

XXL-RPC v1.3.1分散式服務框架擴充套件多種路由策略

   Release Notes 1、負載均衡/軟負載:提供豐富的負載均衡策略,包括:輪詢、隨機、LRU、LFU、一致性HASH等; 2、服務發現註冊邏輯優化:支援批量註冊、摘除,升級 xxl-registry 至 v1.0.1; 3、新增jfinal型別示例專案 "x

RHEL64 缺少ISO 9660影象 安裝程式試圖掛載映像#1在硬碟上無法找到該映像

用光碟安裝Linux,很容易,按照提示一步一步就好。如果沒有光碟機,只好想辦法用硬碟或者U盤安裝了。首先說說怎樣用U盤啟動Linux的安裝程式:1.將ISO映象檔案拷貝到U盤中,並解壓到U盤根目錄。將isolinux目錄中的vmlinuz、initrd.img拷貝到U盤根目錄

jsp和js分開寫在js無法通過el表示式取後臺model傳遞過來的值

原因:在jsp檔案中可以引入EL對應的標籤庫,但在JS檔案中是無法引入的 解決辦法: EL表示式不能用於js檔案中,一般用於jsp檔案,但可用於jsp檔案中的js程式碼裡, 所以解

解決在IE8無法使用原生JSON的問題

起因        在專案中要將頁面上的js物件傳給後臺,想到可以用json轉成字串傳遞。 1 2 var obj = {"a":1 "b":2, "c":3}; var str = JSON.stringify(obj);     

Spring類註冊不上applicationContext不初始化在Filter無法getBean、使用Dao、Service等

新建一個xml檔案,裡面複製下面內容: <?xml version="1.0" encoding="UTF-8"?>   <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springf

解決hadoop 3.0.0配置過程無法找到hadoop-env.sh的問題

初次嘗試安裝配置Hadoop,並且使用了新版本3.0.0,依據網上教程進行安裝過程中,在進行修改配置檔案時候出現了問題:無法找到hadoop/conf/hadoop-env.sh。具體見圖1。 網上各種搜尋無果後決定自己找找看,想到了用WinSCP會不會有檔案搜尋功能,登

win10下安裝Solr7.3.1並匯入mysql資料

下載後解壓到一個位置,我這裡是G:\solr-7.3.1,下文用${solr_home}表示solr所在的路徑然後用cmd進入到${solr_home}\bin目錄,然後執行,啟動solrsolr start下面要去建立solr的core,因為這裡是單機,所以只建立一個cor

狀態機--狀態機1關於戰鬥兵種狀態的初步設計

戰鬥中的主要物件是兵種,最前期只有待機,行走,攻擊三種狀態,而這些都由兵種AI去呼叫切換 簡單的AI如:向前行走,如果攻擊範圍內出現敵人,則切換為待機狀態,攻擊間隔一到就開始攻擊 工程是用quick-cocos2dx建立的,用的是lua指令碼語言,程式碼如: local

面試寶典-面試題3.1:數組的重復數字

ber 個數 cout scan while visit urn 面試 string 一、題意:一個數組中任意一個重復的數字 二、思路:   1.因為題中給的數字大小範圍在0~n-1,因此可以直接用一個數據來記錄數字是否重復出現過。時間復雜度為O(n),空間復雜度也為O(n

art.Dialog.open:IE6/IE7/IE8無法開啟嵌入頁面的解決方法

專案中用到了art.Dialog,就是用art.Dialog.open開啟嵌入頁面,在火狐等瀏覽器都正常, 但是IE6/IE7/IE8下一直無法無法嵌入開啟頁面, 原因是href=”javascript:;” 引起的, 去掉 href=”javascript:;”後,正常

C++筆試題(1)持續更新……

重拾C++經典筆試題(30+) 31.標頭檔案的作用是什麼? 1、通過標頭檔案來呼叫庫功能。在很多場合,原始碼不便(或不準)向用戶公佈,只要向用戶提供標頭檔案和二進位制的庫即可。使用者只需要按照標頭檔案中的介面宣告來呼叫庫功能,而不必關心介面怎麼實現的。編譯器會從庫

編譯及安裝最新的qt/x11 4.3.4qtopia 4.3.1 qtopia-core-opensource-src-4.3.3以及使用方法

首先去官方網站下載最新的這倆東西的原始碼包:http://trolltech.com/downloads/opensourceqt-x11-opensource-src-4.3.4.tar.gzqtopia-opensource-src-4.3.1.tar.gz 在/也就是根