2010-02-22 3 views
0

Привет, ребята, новичок на этом сайте, но большой поклонник. Правильно проблема. Мы обратили внимание, что иногда в Internet Explorer переменная post не проходит. Это наша основная функция АяксаJavascript Internet Explorer 8/7 Не публиковать в Ajax Call

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, которая иногда случается.

Я думал, что это может быть проблема с кешированием. Но мы делаем один файл functions.js, однако в evertime мы делаем изменение, которое мы меняем последним измененным timestamp, и используем htaccess для получения нового файла, который, похоже, работает. Поскольку IE и т. Д. Рассматривает файл как новый в своем кеше.

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

Благодарим за помощь. Richard

+5

Oh boy. Стоп. Бросьте этот код. Для этого абсолютно безумно использовать обнаружение агента пользователя. Либо используйте обнаружение объектов (например, http://www.jibbering.com/2002/4/httprequest.html, но без использования глобалов), либо используйте библиотеку, такую ​​как http://developer.yahoo.com/yui/connection/ или http://api.jquery.com/category/ajax/ - поскольку для библиотек «слишком большой для ваших участников» - ваш сайт вообще использует какую-либо графику? Если да, принесите жертву за приличную библиотеку. – Quentin

+1

«Слишком большой, чтобы скачать для наших членов» - это часть дерьма. Используйте правильные инструменты для правильных заданий или вообще не делайте этого. –

+1

У вас может быть отличный кросс-браузер getXMLHttpRequest в однострочном режиме; нет необходимости в целостной структуре. Но да, браузерный обнюхивает здесь катастрофу. – bobince

ответ

-1

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

-1

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

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

+0

Может ли кто-нибудь указать, почему существует проблема? Richard –

+0

Проблема в том, что вы кодируете уже несколько клиентских фреймворков и, вероятно, сделали лучше. Как я уже сказал, вы обычно можете захватывать основные функциональные возможности этих фреймворков со своих соответствующих веб-сайтов или использовать ссылки CDN, http://en.wikipedia.org/wiki/Content_delivery_network, в эти рамки. Автомобили уже построены, просто научитесь управлять ими. – nickytonline

0

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

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

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

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

0

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

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 Спасибо за вашу помощь. Richard

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