AJAX错误“setRequestHeader”未定义

时间:2013-10-09 16:36:40

标签: javascript ajax

我对我的代码中的错误感到有点困惑

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没有定义"错误以及显示链接的新窗口" localhost / blog / app / POST"

我尽可能多地抬头看,我不知道下一步该做什么 也。编写代码必须有一个比我对getXML()函数更好的方法。

2 个答案:

答案 0 :(得分:4)

setRequestHeader是XmlHttpRequest对象的方法。 Read about it here.

您需要xhr.setRequestHeader(...)

答案 1 :(得分:-1)

我很抱歉我的愚蠢问题。我没有意识到的是,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;                                                                                                                                                                                                                                         
          }