猎酷网

Javascript巧妙解决img做网站异常提交问题

2013-04-12 0人评论 690次浏览 分类:Js/Jquery特效

本文向大家描述一下使用javascript巧妙操作img做网站异常提交,表如果要实现单提交数据到服务器A,如果服务器A访问不了就提交到服务器B,利用js操作img来处理完成是个不错的选择。

使用javascript巧妙操作img做网站异常提交

如果要实现表单提交数据到服务器A,如果服务器A访问不了就提交到服务器B,使用JS实现上面的所讲功能,要考虑跨域问题,有使用过ajax的xmlhttp方法检测远程文件不存在返回404的方案,这种方案在测试时由于ajax存在跨域问题,所以就不采用了,也使用过img的onerror与onload事件这种方案来处理,但是这种方案会造成提交表单IE会弹窗,浏览器又拦截了弹窗,所以又不采用此方案,哪怎么办呢?搞得挺久,最终还是利用js操作img来处理完成,下面是具体步骤。

第1步、创建一个test.htm文件

内容如下:

  1. <html> 
  2. <scriptsrcscriptsrc="getMessage.js"></script> 
  3. <body> 
  4. <formnameformname="mfrm"> 
  5. <inputidinputid="SendType" 
  6. type="hidden"value="s129"name="SendType"/> 
  7. <inputidinputid="title"name="title"/> 
  8. <inputonClickinputonClick="returngetMessage(this.form);
  9. "type="button"name="imageField"/> 
  10. </form> 
  11. </body> 
  12. </html> 

第2步:创建getMessage.js文件

内容如下:

  1. functiongetMessage(frm){  
  2. varsendtype=frm.SendType;  
  3. vartitle=frm.title;  
  4. //创建模拟form表单  
  5. varobjfrm=document.createElement("form");  
  6. varobjsendtype=document.createElement("input");  
  7. varobjtitle=document.createElement("input");  
  8. //利用操作img来处理目标接收数据的服务器页面  
  9. varobjImg=document.createElement("img");  
  10. objImg.id="TmpSmsImg";  
  11. objImg.src="http://www.xueit.com/images/logo.gif";  
  12. //默认服务器A图片  
  13. document.body.appendChild(objImg);  
  14. varimgWidth=document.getElementById("TmpSmsImg").width;  
  15. document.body.removeChild(objImg);  
  16.  
  17. if(imgWidth=="210")  
  18. //如果图片存在,就可以获取到宽度等于预定值,  
  19. 默认接收数据的服务器A的页面  
  20. {  
  21. objfrm.action="http://www.xueit.com/testGet.aspx";  
  22. }  
  23. else//图片不存在,另一台接收数据的服务器B的页面  
  24. {  
  25. objfrm.action="http://demo.xueit.com/testGet.aspx";  
  26. }  
  27.  

下面是表单的属性


  1. objfrm.id="TmpForm";  
  2. objfrm.name="TmpForm";  
  3. objfrm.target="_blank";  
  4. objfrm.method="post";  
  5. objfrm.style.display="none";  
  6.  
  7. objsendtype.type="hidden";  
  8. objsendtype.name="SendType";  
  9. objsendtype.value=Utf2Gb(sendtype);  
  10.  
  11. objtitle.type="hidden";  
  12. objtitle.name="title";  
  13. objtitle.value=Utf2Gb(title);  
  14.  
  15. //附加  
  16. objfrm.appendChild(objsendtype);  
  17. objfrm.appendChild(objtitle);  
  18.  
  19. //表单提交  
  20. document.body.appendChild(objfrm);  
  21. objfrm.submit();  
  22. document.body.removeChild(objfrm);  
  23.  
  24. //clearobj  
  25. objtitle=null;  
  26. objsendtype=null;  
  27. objfrm=null;  
  28.  
  29. }  
  30.  
  31. //处理编码函数  
  32. functionUtf2Gb(str)  
  33. {  
  34. if(str!=null&&str!="")  
  35. str=escape(str);  
  36. returnstr;  
  37. }  
  38.  

以上代码主要是利用img图片,如果图片所在服务器正常运行的话,图片会加载到当前页面的body区域中,所以再获取这个img图片的宽度,如果宽度等于你知道的预定值,就代表默认服务器正常,否则代码服务器A不正常,就把数据提交到服务器B处理。



顶一下
(0)
0%
踩一下
(0)
0%

发表评论共有0访客发表了评论

    暂无评论,快来抢沙发吧!

我来说几句吧

验证码: 看不清楚?