Mercurial > hg > chronicle
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 } |