无法操纵xmlHttpRequest 2的响应

时间:2013-08-25 10:03:26

标签: javascript xmlhttprequest response

我正在使用XHR 2上传/保存文件。

根据我想要执行操作的服务器的响应。例如,如果响应是“已保存”我想隐藏div或如果响应是“未保存”我想显示另一个div等...

我实现了一个看似简单的代码应该正常工作,但不是

以下是XHR的片段

    //initialize

     var xhr = new XMLHttpRequest();
          xhr.open('POST', 'upload.php');
          xhr.responseType="text";
          xhr.onload = function() {

                                  //if all ok.... 
                      if (xhr.status === 200)         
                      { 
                                       //update html5 progress bar                                   
                       progress.value = progress.innerHTML = 100;

                                       //get the respnse  
                      var data=xhr.response;

                                      //convert it to sting - kind of overkill, I know, but I'm stack
                           var data2=data.toString();

                                      //alert it -- works    
                      alert('data2     '+data2);



                                 //now, do something, according to the response -- NOT working, never alert anything
                               if (data2=="Not Saved"){alert('Ooops, not saved');}


                                if(data2=="Saved"){alert('It's all good');} 


                              if(data2=="File too big"){alert('hey, you are watching Jake and Amir');}  


                              document.getElementById('imagesaved').innerHTML=data; 


                     } 

//refers to if (xhr.status === 200)               
else {document.getElementById("imagesaved").innerHTML="Connect to server failed";}

这里有什么问题?这应该是正常的吗?有什么建议吗?

由于

修改

我把警报用于测试。我真正想做的是调用一些函数。

如果我把

if (data2=="Not Saved"){functionOne();}


if(data2=="Saved"){functionTwo();}  


if(data2=="File too big"){functionThree();} 

函数永远不会被调用

如果我把

if (data2!="Not Saved"){functionOne();}


if(data2!="Saved"){functionTwo();}  


if(data2!="File too big"){functionThree();}

所有功能都被调用!!!

我还是不明白......也许是回应的东西?还是onload函数?

再次感谢

2 个答案:

答案 0 :(得分:1)

我最终做的是使服务器响应数字,而不是文本。所以编码无关紧要......

这是代码

    var xhr = new XMLHttpRequest();
    xhr.onload = function() {
                      if (xhr.status == 200)          
                      {                                      
                      var data=xhr.response;



                              if(data==1) 

         //say to  the user is saved
{document.getElementById('imagesaved').innerHTML="Saved";}  

    //say to the user, there was an error

    else{document.getElementById('imagesaved').innerHTML="Error";}


                                    }         
                        //say to the user that connection to the server failed
                     else {document.getElementById("imagesaved").innerHTML="Cannot connect";}
          };


          xhr.open('POST', 'upload.php');
     xhr.send(formData);

这是一种解决方法。从技术上讲,我不知道它是否是解决这个问题的正确方法。无论如何我决定发布它,以帮助其他人快速解决类似的问题。如果其他人有更好的建议方式,请做。

答案 1 :(得分:0)

在这一行:if(data2=="Saved"){alert('It's all good');},你必须逃避“'”。 因此,请将其转换为:if(data2=="Saved"){alert('It\'s all good');}

你确定你的ajax的响应是text / plain吗? 在网络或网络选项卡上查看控制台(ctrl + shift + i on chrome,F12 on firefox)。

如果您也遇到一些javascript错误,请查看控制台选项卡。