Форумы портала PHP.SU » » Хранилище функций на JavaScript » Приближение к универсальности отправки формы AJAX

Страниц (1): [1]
 

1. -=1100=- - 16 Декабря, 2011 - 12:40:44 - перейти к сообщению
Нужен универсальный (как можно ближе к универсальности) скрипт по отправке форм средствами ajax.
Нашел на сайте (http://netfaq.ru/ajax/ajax_post_request) скрипт и добавил некие возможности.

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. function createXMLHttp(){
  3.  if(typeof XMLHttpRequest != "undefined"){ // для браузеров аля Mozilla
  4.     return new XMLHttpRequest();
  5.  } else if(window.ActiveXObject){ // для Internet Explorer (all versions)
  6.           var aVersions = ["MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0",
  7.                            "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp",
  8.                            "Microsoft.XMLHttp"];
  9.          
  10.           for (var i = 0; i < aVersions.length; i++) {
  11.             try {
  12.                  var oXmlHttp = new ActiveXObject(aVersions[i]);
  13.                  return oXmlHttp;
  14.             }
  15.             catch (oError) {}
  16.           }
  17.          
  18.          
  19.           throw new Error("Невозможно создать объект XMLHttp.");
  20.     }
  21.       }
  22.      
  23.        
  24.   function getRequestBody(oForm) {
  25.         var aParams = new Array();
  26.        
  27.         for(var i = 0; i < oForm.elements.length; i++) {
  28.             var sParam='';
  29.           if(oForm.elements[i].type=='radio'){
  30.             if(oForm.elements[i].checked){
  31.                sParam += encodeURIComponent(oForm.elements[i].name)
  32.                sParam += "=";  
  33.                sParam += encodeURIComponent(oForm.elements[i].value);}
  34.           }else if(oForm.elements[i].type=='checkbox'){
  35.              sParam += encodeURIComponent(oForm.elements[i].name)
  36.              sParam += "=";
  37.              if(oForm.elements[i].checked){
  38.                 sParam += encodeURIComponent(oForm.elements[i].value);
  39.              }else{
  40.                 sParam +='no';
  41.               }  
  42.            }else{
  43.              sParam += encodeURIComponent(oForm.elements[i].name);
  44.              sParam += "=";
  45.              sParam += encodeURIComponent(oForm.elements[i].value);
  46.            
  47.            }
  48.              aParams.push(sParam);
  49.         }
  50.         return aParams.join("&");
  51.    }
  52.      
  53.  
  54.       function sendRequest(oForm,res) {
  55.         var oForm = document.getElementById(oForm);
  56.         var sBody = getRequestBody(oForm);
  57.         var oXmlHttp = createXMLHttp();
  58.        
  59.         oXmlHttp.open("POST",oForm.action, true);
  60.         oXmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  61.         oXmlHttp.setRequestHeader("Content-length", sBody.length);
  62.         oXmlHttp.setRequestHeader("Connection", "close");
  63.        
  64.         oXmlHttp.onreadystatechange = function() {
  65.           if(oXmlHttp.readyState == 4) {
  66.             if(oXmlHttp.status == 200) {
  67.               saveResult(oXmlHttp.responseText,res);
  68.             } else {
  69.               saveResult("Ошибка: " + oXmlHttp.statusText);
  70.               oXmlHttp.abort();
  71.             }
  72.           }
  73.         };
  74.        
  75.         oXmlHttp.send(sBody);
  76.       }
  77.      
  78.       function saveResult(sText,res) {
  79.         var sElem = document.getElementById(res);
  80.         sElem.innerHTML = sText;
  81.       }
  82.  


Принцип такой.
в form прописать id.
В каком нибудь месте прописать OnClick=sendRequest('id form','id div-result');

Но особо я JS не знаю, и хотел бы спросить, может что еще надо дописать, убрать, исправить?

 

Powered by ExBB FM 1.0 RC1