Javascript操作img解决网站提交数据异常问题

开发 前端
这里和大家分享一下使用Javascript巧妙操作img做网站异常提交数据处理,要实现表单提交数据到服务器A,如果服务器A访问不了就提交到服务器B功能,这里向大家提供了一个简洁实用的方法。

本文和大家重点讨论一下使用Javascript巧妙操作img做网站异常提交数据处理,通过两步就可以实现表单提交数据到服务器A,如果服务器A访问不了就提交到服务器B功能,具体内容请看下文详细介绍。

使用Javascript巧妙操作img做网站异常提交数据处理

本文要做的功能效果如下:

表单提交数据到服务器A,如果服务器A访问不了就提交到服务器B

要使用JS实现上面的所讲功能,要考虑跨域问题,有使用过ajax的xmlhttp方法检测远程文件不存在返回404的方案,这种方案在测试时由于ajax存在跨域问题,所以就不采用了,也使用过img的onerror与onload事件这种方案来处理,但是这种方案会造成提交表单IE会弹窗,浏览器又拦截了弹窗,所以又不采用此方案,哪怎么办呢?搞得挺久,最终还是利用js操作img来处理完成。
也许说了这么多,你还看不懂我所表达的意思,暂不管这些,下面看代码你就清楚了。

第1步、创建一个test.htm文件,内容如下:

Code

  1. <html> 
  2. <scriptsrcscriptsrc="getMessage.js"></script> 
  3. <body> 
  4. <formnameformname="mfrm"> 
  5. <inputidinputid="SendType"type="hidden"  
  6. 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文件,内容如下:

Code

  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. 就可以获取到宽度等于预定值,默认接收数据的服务器A的页面  
  19. {  
  20. objfrm.action="http://www.xueit.com/testGet.aspx";  
  21. }  
  22. else//图片不存在,另一台接收数据的服务器B的页面  
  23. {  
  24. objfrm.action="http://demo.xueit.com/testGet.aspx";  
  25. }  
  26.  
  27. //下面是表单的属性  
  28. objfrm.id="TmpForm";  
  29. objfrm.name="TmpForm";  
  30. objfrm.target="_blank";  
  31. objfrm.method="post";  
  32. objfrm.style.display="none";  
  33.  
  34. objsendtype.type="hidden";  
  35. objsendtype.name="SendType";  
  36. objsendtype.value=Utf2Gb(sendtype);  
  37.  
  38. objtitle.type="hidden";  
  39. objtitle.name="title";  
  40. objtitle.value=Utf2Gb(title);  
  41.  
  42. //附加  
  43. objfrm.appendChild(objsendtype);  
  44. objfrm.appendChild(objtitle);  
  45.  
  46. //表单提交  
  47. document.body.appendChild(objfrm);  
  48. objfrm.submit();  
  49. document.body.removeChild(objfrm);  
  50.  
  51. //clearobj  
  52. objtitle=null;  
  53. objsendtype=null;  
  54. objfrm=null;  
  55.  
  56. }  
  57.  
  58. //处理编码函数  
  59. functionUtf2Gb(str)  
  60. {  
  61. if(str!=null&&str!="")  
  62. str=escape(str);  
  63. returnstr;  
  64. }  
  65.  

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

【编辑推荐】

  1. Javascript中split函数用法指导手册
  2. 深入剖析JavaScript和Java的区别
  3. JavaScript数组元素删除问题解决方案
  4. JavaScript对象的定义及创建实例
  5. 解析Javascript中replace()方法使用

 

责任编辑:佚名 来源: lianglong.org
相关推荐

2010-09-30 15:10:12

Javascriptimg

2009-11-09 10:10:13

WCF异常

2024-03-27 07:55:58

SpringRedis海量

2022-06-09 09:20:41

ahooksaxios

2010-01-06 14:24:40

Javascript解

2013-02-26 09:51:31

Windows 8应用异常问题

2023-09-17 23:23:14

Java异常堆栈

2010-05-19 10:18:23

svn 403 for

2010-08-27 09:06:49

F#

2010-04-14 14:55:29

Unix操作系统

2010-04-09 16:45:42

Unix操作系统

2010-09-06 10:14:55

2010-09-07 14:33:30

DIVmargin

2010-09-15 09:43:24

Javascript浏览器兼容

2023-12-26 14:28:08

JavaScript开发

2011-04-12 16:51:29

Javascript兼容性

2010-08-11 13:35:10

JavaScriptCSS

2010-05-05 10:25:24

Unix操作系统

2022-07-14 14:27:34

Javascript数字精度二进制

2009-06-30 17:16:43

jsp网站开发
点赞
收藏

51CTO技术栈公众号