2011-02-02 1 views
0

У меня есть следующий код, работающий во всех браузерах, но IE8 .. я читал, что если бы я использовал xhttp = new ActiveXObject («Microsoft.XMLHTTP»); линия должна работать для IE, но я не sure..anyone иметь опыт в получении этой работы с ie8Что такое IE как о xmlhttprequest?

function loadXMLDoc(dname) 
{ 
if (window.XMLHttpRequest) 
{ 
xhttp=new XMLHttpRequest(); 
} 
else 
{ 
xhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
} 
xhttp.open("GET",dname,false); 
xhttp.send(); 
return xhttp.responseXML; 
} 

var xmlDoc = loadXMLDoc("nhl_standings_xml.xml"); 
var x = xmlDoc.getElementsByTagName("nhlall"); 
+1

IE8 (и IE7) [поддерживает XMLHttpRequest изначально] (http://msdn.microsoft.com/en-us/library/cc534581%28v=vs.85%29.aspx). Что именно «не работает»? Я собираюсь угадать, что это использование синхронного запроса (или отсутствие использования библиотеки), но кто знает. –

+0

Да ладно, вам не нужно jQuery только для простого запроса AJAX. jQuery делает людей неспособными понять фундаментальные процессы JavaScript ... – Blender

+0

переменные возвращаются undefined .. работает во всех других браузерах .. У меня есть файлы локально размещенные на apache .. и jquery или нет, он не должен работать в теории? – Shawn

ответ

0

Хм, код выглядит хорошо. Вы пробовали запрос Asynchronous? Когда у вас есть xhttp.open("GET", dname, false);, он синхронный. Измените это false на true, и вы асинхронны. Кроме того, вы не указали переменную xhttp (исправьте меня, если я ошибаюсь. Будучи кодером Python, я не могу понять половину времени).

Попробуйте этот код:

function loadXML(url) 
{ 
    var xmlHttp; 

    try 
    { 
    // Firefox, Opera 8.0+, Safari 
    xmlHttp = new XMLHttpRequest(); 
    } catch (e) { 
    // Internet Explorer 
    try 
    { 
     xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); 
    } catch (e) { 
     try 
     { 
     xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
     } catch (e) { 
     return false; 
     } 
    } 
    } 

    xmlHttp.onreadystatechange = function() 
    { 
    if(xmlHttp.readyState == 4) 
    { 
     return xmlHttp.responseText; 
    } 
    } 

    xmlHttp.open("GET", url, true); 
    xmlHttp.send(null); 
} 

var xmlDoc = loadXML("nhl_standings_xml.xml"); 
var x = xmlDoc.getElementsByTagName("nhlall"); 
+0

переменные объявлены в порядке. , вам не нужно класть var вперед, но я сделал .. и изменил false на true .. все тот же результат .. можете ли вы объяснить, что такое изменение от синхронного до асинхронного? – Shawn

+0

Цитата из какого-то случайного места: Следует избегать запросов, сделанных в режиме синхронизации. Эти запросы заставят браузер заблокировать пользователя до тех пор, пока запрос не вернется. В случаях, когда сервер занят, и ответ занимает некоторое время, браузер пользователя (и, возможно, ОС) не позволит ничего другого сделать. В случаях, когда ответ никогда не принимается должным образом, браузер может продолжать блокироваться до истечения времени ожидания запроса. – Blender

+0

Хорошо, мне кажется, я знаю, в чем проблема. Ваша функция не ждет сообщения '200' (успех = 200). Я обновил ответ. – Blender

0

я предлагаю вам этот МИНИМАЛЬНЫЙ АЯКС двигатель.

http://pastebin.com/uXJe9hVC

пример Usuage

запрос Ajax POST

Ajax.call('GET','http://localhost/index.php',function(data) { 
{ 
//doing stuff with the data response 
},'ASD'); 

аргументы вызова: URL, обратного вызова, POST

это так легко.

+0

Можете ли вы рассказать мне, где я разместил URL-адрес страницы xml в этом коде? а также какая переменная равна xmlDoc сверху? – Shawn

+0

разве это то же самое, что у меня было выше? извините .. я знаю, что это легко, но я не могу понять, что это такое. Что отличается от этого кода, чем тот, который я опубликовал изначально? – Shawn

+0

это работает на ie8 isnt it? –

0

Попробуйте это как запрос стартера:

if  (window.XMLHttpRequest) return new window.XMLHttpRequest(); 
    else if (window.ActiveXObject) { 
    // the many versions of IE's XML fetchers 
    var AXOs = [ 
     'MSXML2.XMLHTTP.6.0', 
     'MSXML2.XMLHTTP.5.0', 
     'MSXML2.XMLHTTP.4.0', 
     'MSXML2.XMLHTTP.3.0', 
     'MSXML2.XMLHTTP', 
     'Microsoft.XMLHTTP', 
     'MSXML.XMLHTTP' 
    ]; 
    for (var i = 0; i < AXOs.length; i++) { 
     try  { return new ActiveXObject(AXOs[i]); } 
     catch() { continue; } 
    } 
    return null; 
    } 

порядок выше должен быть правильный порядок лучше к хуже, BTW.

Смежные вопросы