Опять про AJAX (проблема в поддержке старых браузеров)

Статус
В этой теме нельзя размещать новые ответы.

lexesv

Постоялец
Регистрация
15 Ноя 2006
Сообщения
118
Реакции
103
Вот пример кода (прошу прощения за большой объём)

Он поддерживается такими браузерами как IE7, Opera 9, Mozilla Firefox 1.5

Я не специалист в JS, в основном программирую на PHP,
но вот столкнулся с необходимостью применить XMLhttpRequest в веб приложении.

Так вот, возможно ли как нибудь поправить данный код, что бы он работал в других браузерах, например IE6


HTML:
 //Copyright (c) 2006 Ismail Ata KURT (http://blog.livaxmedia.com)

 function ajaxGet(file,obj){
  var xmlObj = null;
  if(window.XMLHttpRequest){
      xmlObj = new XMLHttpRequest();
  } else if(window.ActiveXObject){
      try {
            xmlObj = new ActiveXObject("Msxml2.XMLHTTP");
         } catch (e) {
            try {
               xmlObj = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {
                return;
            }
         }
  } else {
      return;
  }

xmlObj.onreadystatechange = function(){
    if(xmlObj.readyState == 4){
       var result = xmlObj.responseText

       updateObj(obj, result);
     }
    }

    document.getElementById(obj).innerHTML="<img src=\"yukleniyor.gif\">";
    xmlObj.open ('GET', file, true);
    xmlObj.send ('');
  }

 function ajaxSend(file,obj,form_name,param) {
    var xmlObj    =    null;
    //var param   =   null;
    var stmp    =   null;
    var i       =   0;
    var s       =   0;

    //alert(document.getElementById(form_name).length);
    form = document.getElementById(form_name);

    for(i=0;i<=form.length-1;i++) {
        //alert(form.elements[i].name+"/"+form.elements[i].type);
        switch (form.elements[i].type) {
            case "text":
                if(param!=null) {
                    param+=("&"+form.elements[i].name+"="+encodeURI(form.elements[i].value));
                } else {
                    param=(form.elements[i].name+"="+encodeURI(form.elements[i].value));
                }
                break;
            case "password":
                if(param!=null) {
                    param+=("&"+form.elements[i].name+"="+encodeURI(form.elements[i].value));
                } else {
                    param=(form.elements[i].name+"="+encodeURI(form.elements[i].value));
                }
                break;
            case "hidden":
                if(param!=null) {
                    param+=("&"+form.elements[i].name+"="+encodeURI(form.elements[i].value));
                } else {
                    param=(form.elements[i].name+"="+encodeURI(form.elements[i].value));
                }
                break;
            case "radio":
                //alert(form.elements[i].name.length);

                if(param!=null) {
                    if(form.elements[i].checked==true) {
                    param+=("&"+form.elements[i].name+"="+encodeURI(form.elements[i].value));}
                } else {
                    if(form.elements[i].checked==true) {
                    param=(form.elements[i].name+"="+encodeURI(form.elements[i].value));}
                }
                break;
            case "select-one":

                 if(param!=null) {

                    param+=("&"+form.elements[i].name+"="+encodeURI(form.elements[i].options[form.elements[i].selectedIndex].value));
                } else {

                    param=(form.elements[i].name+"="+encodeURI(form.elements[i].options[form.elements[i].selectedIndex].value));
                }
                break;
            case "checkbox":


                 if(param!=null) {

                    param+=("&"+form.elements[i].name+"="+encodeURI(form.elements[i].checked));
                } else {

                    param=(form.elements[i].name+"="+encodeURI(form.elements[i].checked));
                }
                break;
            case "select-multiple":
                //alert(form.elements[i].length);
                for(s=0;s<form.elements[i].length;s++) {

                        if(form.elements[i].options[s].selected==true) {
                            if(stmp==null) {
                                stmp=form.elements[i].options[s].value;} else {
                                stmp+="|"+form.elements[i].options[s].value
                                }
                        }

                }
                if(stmp==null) { stmp=-1;}
                if(param!=null) {

                    param+=("&"+form.elements[i].name+"="+encodeURI(stmp));
                } else {

                    param=(form.elements[i].name+"="+encodeURI(stmp));
                }
                break;
            case "textarea":
                if(param!=null) {
                    param+=("&"+form.elements[i].name+"="+encodeURI(form.elements[i].value));
                } else {
                    param=(form.elements[i].name+"="+encodeURI(form.elements[i].value));
                }
                break;

        }
    }

      

  if(window.XMLHttpRequest){
      xmlObj = new XMLHttpRequest();
      if (xmlObj.overrideMimeType) {
             xmlObj.overrideMimeType('text/html');
         }
  } else if(window.ActiveXObject){
       try {
            xmlObj = new ActiveXObject("Msxml2.XMLHTTP");
         } catch (e) {
            try {
               xmlObj = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {
                return;
            }
         }
  } else {
      return;
  }
    xmlObj.onreadystatechange = function(){
    if(xmlObj.readyState == 4){
      if(xmlObj.status    == 200) {
        var result = xmlObj.responseText

       updateObj(obj, result);
    }
     }
    }

  document.getElementById(obj).innerHTML="<img src=\"yukleniyor.gif\">";

  xmlObj.open('POST', file, true);
  xmlObj.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  xmlObj.setRequestHeader("Content-length", param.length);
  xmlObj.setRequestHeader("Connection", "close");
  xmlObj.send(param);


}
  function updateObj(obj, data){
      //alert(data);
      document.getElementById(obj).innerHTML=data;
  }
 
Гораздо проще найти кроссбраузерную библиотеку, которая одинаково хорошо работает и в старых браузерах.
 
Для просмотра ссылки Войди или Зарегистрируйся
Кроссбраузерность. Библиотека работает в IE5.0+, Mozilla 1.7+, FireFox 1.0+, Opera 7.3+, Safari (здесь "+" означает "в этой и более новых версиях"). Кроме того, код может работать без поддержки ActiveX и XMLHttpRequest (однако, если эти возможности включены в браузер, они автоматически задействуются).
 
А что происходит в ИЕ6? какая ошибка?
 
http://www.google.com/codesearch?hl=ru&q=file:\.js$+XMLHttpRequest&ct=hp

Думаю, этого хватит :)
 
  • Заблокирован
  • #6
имхо единственная нормальная ajax библиотека, это котеровская JsHttpRequest (ссылка в третьем посте)..
 
+1 за кроссбраузерную библиотеку с ней будет намного меньше гимора
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху