comparison themes/blog.steve.org.uk/ajax.js @ 156:8b0c547cd015

Updated to show / hide progress as appropriate
author Steve Kemp <steve@steve.org.uk>
date Thu, 03 Jan 2008 22:13:57 +0000
parents 4a882ba147e4
children
comparison
equal deleted inserted replaced
155:4d2f0d6866e5 156:8b0c547cd015
1 // -*-mode: C++; style: K&R; c-basic-offset: 4 ; -*- */
2 //
3 // Simple collection of Javascript for Ajax form submission.
4 //
1 5
2 function submitAjax() 6
7
8
9 //
10 // Get an XMLHTTPRequest object.
11 //
12 function getXMLHTTPRequest()
3 { 13 {
4 var xhr; 14 req = false;
5 try { xhr = new ActiveXObject('Msxml2.XMLHTTP'); } 15 if(window.XMLHttpRequest)
6 catch (e) 16 {
7 { 17 try
8 try { xhr = new ActiveXObject('Microsoft.XMLHTTP'); }
9 catch (e2)
10 { 18 {
11 try { xhr = new XMLHttpRequest(); } 19 req = new XMLHttpRequest();
12 catch (e3) { xhr = false; } 20 }
21 catch(e)
22 {
23 req = false;
13 } 24 }
14 } 25 }
26 else if(window.ActiveXObject)
27 {
28 try
29 {
30 req = new ActiveXObject("Msxml2.XMLHTTP");
31 }
32 catch(e)
33 {
34 try
35 {
36 req = new ActiveXObject("Microsoft.XMLHTTP");
37 }
38 catch(e)
39 {
40 req = false;
41 }
42 }
43 }
44
45 return( req );
46 }
15 47
16 xhr.onreadystatechange = function() 48
49 //
50 // Submit the comment.
51 //
52 function submitComment()
53 {
54 showProgress();
55
56 var xhr = getXMLHTTPRequest();
57 if(! xhr )
17 { 58 {
18 if(xhr.readyState == 4) 59 hideProgress();
19 { 60 return;
20 if(xhr.status == 200) 61 }
21 { 62
22 var o = document.getElementById( "output" ); 63 xhr.onreadystatechange = function()
23 o.innerHTML = xhr.responseText; 64 {
24 } 65 if(xhr.readyState == 4)
25 else 66 {
26 { 67 if(xhr.status == 200)
27 var o = document.getElementById( "output" ); 68 {
28 o.innerHTML = "Failed HTTP code " + xhr.status + " " + xhr.responseText; 69 var o = document.getElementById( "output" );
29 } 70 o.innerHTML = xhr.responseText;
30 } 71 }
72 else
73 {
74 var o = document.getElementById( "output" );
75 o.innerHTML = "Failed HTTP code " + xhr.status + " " + xhr.responseText;
76 }
77
78 hideProgress();
79 }
31 }; 80 };
32 81
33 data = 'ajax=1'; 82 data = 'ajax=1';
34 data = data + '&id=' + escape(document.forms[0].id.value ); 83 data = data + '&id=' + escape(document.forms[0].id.value );
35 data = data + '&captcha=' + escape( document.forms[0].captcha.value ); 84 data = data + '&captcha=' + escape( document.forms[0].captcha.value );
36 data = data + '&id=' + escape(document.forms[0].id.value ); 85 data = data + '&id=' + escape(document.forms[0].id.value );
37 data = data + '&captcha=' + escape( document.forms[0].captcha.value ); 86 data = data + '&captcha=' + escape( document.forms[0].captcha.value );
38 data = data + '&name=' + escape( document.forms[0].name.value ); 87 data = data + '&name=' + escape( document.forms[0].name.value );
39 data = data + '&mail=' + escape( document.forms[0].mail.value ); 88 data = data + '&mail=' + escape( document.forms[0].mail.value );
40 data = data + '&body=' + escape( document.forms[0].body.value ); 89 data = data + '&body=' + escape( document.forms[0].body.value );
90
91 //
92 // Make the request
93 //
41 xhr.open("POST", "/cgi-bin/comments.cgi", true); 94 xhr.open("POST", "/cgi-bin/comments.cgi", true);
42 xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 95 xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
43 xhr.send(data); 96 xhr.send(data);
44 } 97 }
98
99
100 //
101 // Show our progress marker.
102 //
103 function showProgress()
104 {
105 var i = document.getElementById( "progress" );
106 if ( i )
107 {
108 i.style.display = 'block';
109 }
110 }
111
112 //
113 // Hide our progress marker.
114 //
115 function hideProgress()
116 {
117 var i = document.getElementById( "progress" );
118 if ( i )
119 {
120 i.style.display = 'none';
121 }
122 }