2013-10-09 4 views
-2

Я немного запутался, что я делаю неправильно в моем кодеAJAX ошибка «setRequestHeader» не определен

function submitArticle() { 
    var postTitle = encodeURIComponent(document.getElementById('postTitle').value); 
    var postDes = encodeURIComponent(document.getElementById('postDes').value); 
    var postCont = encodeURIComponent(document.getElementById('postCont').value); 
    var data = "postTitle=" + postTitle + "&postDes=" + postDes + "&postCont=" + postDes;          
    var getXML = function() { 
     try { 

      xhr = new XMLHttpRequest(); 
      } 
      catch(e) { 
      try { 
       xhr = new ActiveXObject("Microsoft.XMLHTTP"); 
      } 
      catch(e) { 
       try { 
        xhr = new ActiveXObject("Msxml2.XMLHTTP"); 
       } 
       catch(e) { 
       alert("Your Browser is not Supported"); 

       } 
      }       
      }         
     } 
     open('POST', 'http://localhost/blog/engine/engine.php', true); 
     setRequestHeader("Content-type", "application/x-www-form-urlencoded");    
     send(data);                            
     getXML.onreadystatechange = function() { 
      if(this.readyState === 4) { 
       if(this.status ===200) { 
       alert(this.responseText); 
       } 
       else { 
       alert("status" + this.status); 
       } 
      } 
      else { 
      alert("readyState" + this.readyState); 
      } 
     } 
    getXML();                       
    return true;    
} 

Я использую событие OnClick для этого. Я проверил URL-адрес и убедился, что я не делал ошибок при вводе значений переменных. Я получаю ошибку «setRequestHeader is not defined» вместе с новыми окнами, которые показывают ссылку «localhost/blog/app/POST»

Я искал столько, сколько мог, и я не уверен, что делать дальше ,
Также. должен быть лучший способ написать код, чем то, что я сделал для функции getXML().

+1

Если у вас так мало понимания JavaScript, что вы пытаетесь вызвать методы объекта без каких-либо ссылок на реальный объект, то вы должны, может быть, лучше нам библиотеку как JQuery, который обрабатывает все эти вещи довольно хорошо для вас ... – CBroe

+0

же точная проблема, как в http://stackoverflow.com/questions/19275333/which-methods-are-executed-first-in-an-ajax-call, о которой я вам говорил. :) – epascarello

+0

Спасибо @epascarello Мне удалось получить все, что работает сейчас. – Bazinga777

ответ

0

Прошу прощения за мой довольно глупый вопрос. Я не понял, что XMLHttpRequest имеет ряд методов, из которых open, send и setRequestHeader являются частью того, что сказал @Chris Jones. Поэтому мне нужно будет использовать xhr. «_», когда я использую эти методы.

Это мое обновление, которое работает.

 function submitArticle() { 
      xhr = new ajaxValue(); 
      function ajaxValue() { 
       try { 
        xhr = new XMLHttpRequest();       
        } 
        catch(e) { 
          try { 
           var xhr = new ActiveXObject("Microsoft.XMLHTTP"); 
          } 
        catch(e) { 
           try { 
            var xhr = new ActiveXObject("Msxml2.XMLHTTP"); 
           } 
           catch(e) { 
            alert("Your Browser is not Supported"); 

           } 
        }       
        } 
        return xhr; 
      }                   

      var postTitle = document.getElementById('postTitle').value; 
      var postDes = document.getElementById('postDes').value; 
      var postCont = document.getElementById('postCont').value; 
      var data = "postTitle=" + postTitle + "&postDes=" + postDes + "&postCont=" + postDes;        
      var url = '../engine/engine.php'; 
      xhr.open('POST', url , true); 
      xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
      xhr.send(data);     
      xhr.onreadystatechange = function() { 
             if(this.readyState === 4) { 
               if (this.status ===200) {      
                  alert(this.responseText); 
                  } 
             }     
             else { 
              alert("status " + this.status); 
              alert("readyState " + this.readyState); 
               }             
            }   
      return false;                                                           
      } 
2

setRequestHeader - это метод объекта XmlHttpRequest. Read about it here.

Вам необходимо сделать xhr.setRequestHeader(...).

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