我正在使用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函数?
再次感谢
答案 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错误,请查看控制台选项卡。