Javascript Internet Explorer 8/7 не публикуется в Ajax Call - PullRequest
0 голосов
/ 22 февраля 2010

Привет, ребята, новички в этом сайте, но большой поклонник. Правильно проблема. Нам стало известно, что иногда в Internet Explorer переменная post не указывается. Это наша основная функция ajax

function GetXmlHttpObject(handler){ 
 var objXmlHttp=null

 if (navigator.userAgent.indexOf("Opera")>=0){
  xmlHttp=new XMLHttpRequest();
  xmlHttp.onload=handler
  xmlHttp.onerror=handler
  return xmlHttp;
 }
 if (navigator.userAgent.indexOf("MSIE")>=0){ 
  var strName="Msxml2.XMLHTTP"
  if (navigator.appVersion.indexOf("MSIE 5.5")>=0){
   strName="Microsoft.XMLHTTP"
  } try { 
   objXmlHttp=new ActiveXObject(strName)
   if(handler == null) {
    handler = function() {}
   }
   objXmlHttp.onreadystatechange=handler 
   return objXmlHttp
  } catch(e) { 
   return 
  } 
 } 
 if (navigator.userAgent.indexOf("Mozilla")>=0){
  objXmlHttp=new XMLHttpRequest()
  objXmlHttp.onload=handler
  objXmlHttp.onerror=handler 
  return objXmlHttp
 }
}

и вот вызов, который его использует

 params = "object_type="+object_type+"&object_id="+object_id;
 xmlHttp_comment_notifyreset = GetXmlHttpObject(notification_reset_helper);//fails on safari 1
 xmlHttp_comment_notifyreset.open("POST", url , true);


 xmlHttp_comment_notifyreset.setRequestHeader("Content-Type", "application/x-www-form-URLencoded");
 xmlHttp_comment_notifyreset.setRequestHeader("Content-Length", params.length);
 xmlHttp_comment_notifyreset.setRequestHeader("Connection", "close");
 xmlHttp_comment_notifyreset.send(params);

В принципе, object_type, object_id не отправляются, несмотря на то, что они там. Как я уже сказал, похоже, это просто проблема IE7 / 8, которая иногда возникает.

Я думал, что это может быть проблема с кэшированием. Но мы делаем один файл function.js, но каждый раз, когда мы вносим изменения, мы меняем последнюю измененную временную метку и используем htaccess для получения нового файла, который, кажется, работает. Так как IE и т. Д. Воспринимает файл как новый в его кеше.

P.S. Мы не можем использовать JQuery или любые другие фреймворки, так как они слишком велики для загрузки нашими участниками.

Спасибо за вашу помощь. Ричард

Ответы [ 4 ]

0 голосов
/ 08 марта 2010

Нашел ответ. Хорошо, все вышеперечисленное - это хорошо, получите хороший объект XMLHTTP, который выше выглядит хорошо. Дополнительный заголовок запроса набора также хорош. Но настоящая проблема на этой странице здесь http://qfox.nl/notes/1

0 голосов
/ 23 февраля 2010

Я думаю, что проблема в распознавании IE - вы кладете IE6 + в одну сумку, что не правильно. Насколько я помню, он изменился между ie6 и 7+. Вы не можете зависеть от имен браузера.

Серьезно. Это худший код создания XMLHttpRequest за всю историю. Создание объекта сделано в нескольких замечательных примерах на надежных сайтах разработчиков и в книгах по AJAX. Откуда Вы это взяли?

Но, пожалуйста, используйте рамки. Вас ждет целый новый мир однострочных вызовов ajax !!

Могу поспорить, что правильно переписать ваш код с помощью jquery и минимизировать его (что вы, вероятно, не делаете сейчас), общий вес js будет меньше, чем сейчас. Тем более что полное использование POST займет 5 строк кода.

0 голосов
/ 02 марта 2010

Привет, ребята, у меня все еще есть проблемы. Я использую

function GetXmlHttpObject(handler){ 
     var objxml = null;  
   var ProgID = ["Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP", "Microsoft.XMLHTTP"];              

     try {  
         objxml = new XMLHttpRequest();  
     }  
     catch(e) {  
         for (var i = 0; i < ProgID.length; i++){  
             try {  
                 objxml = new ActiveXObject(ProgID[i]);  
             }  
             catch(e) {  
                 continue;  
            }  
         }  
     } 
         objxml.onreadystatechange=handler;





     return objxml;  

}

как мой объект XML и

это своего рода стиль для вызова страницы

var d = new Date();
    var time = d.getTime();
    var url= SITEURL + "/libs/ajax/ajax_site_mood.php?timestamp="+time;

    params = "mood_value="+value;
    xmlHttp_site_mood = GetXmlHttpObject(null);//fails on safari 1
    xmlHttp_site_mood.open("POST", url , true);

    xmlHttp_site_mood.setRequestHeader("Cache-Control", "no-cache");
    xmlHttp_site_mood.setRequestHeader("Cache-Control", "no-store");
    xmlHttp_site_mood.setRequestHeader("Cache-Control", "must-revalidate");
    xmlHttp_site_mood.setRequestHeader("Cache-Control", "post-check=0");
    xmlHttp_site_mood.setRequestHeader("Cache-Control", "pre-check=0");
    xmlHttp_site_mood.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");    


    xmlHttp_site_mood.setRequestHeader("Content-Type", "application/x-www-form-URLencoded");
    xmlHttp_site_mood.setRequestHeader("Content-Length", params.length);
    xmlHttp_site_mood.setRequestHeader("Connection", "close");
    xmlHttp_site_mood.send(params);

Я изменяю запрос на библиотеку каждый раз, когда он изменяется, основываясь на времени последнего обновления. Но, похоже, не хочет всегда работать. Любые подсказки. Мне также любопытно, какие заголовки jquery он отправляет, когда вызывает сообщение и использует его кеш: false Спасибо за вашу помощь. Ричард

0 голосов
/ 22 февраля 2010

Если они не могут загрузить базовую версию jQuery в миниатюрном или упакованном виде, то, я думаю, у вас проблемы. Это не так уж и много, и тот факт, что браузеры теперь поддерживают 8 подключений ...

Он также доступен через CDN Google, см. http://code.google.com/apis/ajaxlibs/documentation/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...