Nothing happens. Nothing at all. I see "rows" and "names" printed up,
but in my uplog.js, which contains the function startclock(..) which
has an alert in it, evidently never gets called. Worse yet, I get a
peculiar error in the Firefox Error Console when I click on the
link_to_remote link (the error is simply "Permission denied to call
method Location.toString). I am including all of the code below.
## Here is my partial that gets called:
<div id="namesdata" style="float: left; width: 200px;" >
names
<%= link_to_remote("StartClock",
:url =>{ :action => :clockstarter }) %>
</div>
<div id="rowsdata" style="float: left; ">
rows
</div>
## Here is clockstarter.rjs:
page.call "startClock" "../../../../www/test/ggriptest/getdata1.dat"
"./getdata2.php'"
## This is in my layout, which the partial is loaded into:
<%= javascript_include_tag "uplog" %>
## Here is /public/javascripts/uplog.js
if (window.ActiveXObject && !window.XMLHttpRequest) {
window.XMLHttpRequest = function() {
var msxmls = new Array(
'Msxml2.XMLHTTP.6.0',
'Msxml2.XMLHTTP.5.0',
'Msxml2.XMLHTTP.4.0',
'Msxml2.XMLHTTP.3.0',
'Msxml2.XMLHTTP',
'Microsoft.XMLHTTP');
for (var i = 0; i < msxmls.length; i++) {
try {
return new ActiveXObject(msxmls[i]);
} catch (e) {
}
}
return null;
};
}
// Gecko support
/* */
// Opera support
if (window.opera && !window.XMLHttpRequest) {
window.XMLHttpRequest = function() {
this.readyState = 0; // 0=uninitialized,1=loading,2=loaded,
3=interactive,4=complete
this.status = 0; // HTTP status codes
this.statusText = '';
this._headers = ;
this._aborted = false;
this._async = true;
this._defaultCharset = 'ISO-8859-1';
this._getCharset = function() {
var charset = _defaultCharset;
var contentType = this.getResponseHeader('Content-
type').toUpperCase();
val = contentType.indexOf('CHARSET=');
if (val != -1) {
charset = contentType.substring(val);
}
val = charset.indexOf(';');
if (val != -1) {
charset = charset.substring(0, val);
}
val = charset.indexOf(',');
if (val != -1) {
charset = charset.substring(0, val);
}
return charset;
};
this.abort = function() {
this._aborted = true;
};
this.getAllResponseHeaders = function() {
return this.getAllResponseHeader('*');
};
this.getAllResponseHeader = function(header) {
var ret = '';
for (var i = 0; i < this._headers.length; i++) {
if (header == '*' || this._headers[i].h == header) {
ret += this._headers[i].h + ': ' + this._headers[i].v +
'\n';
}
}
return ret;
};
this.getResponseHeader = function(header) {
var ret = getAllResponseHeader(header);
var i = ret.indexOf('\n');
if (i != -1) {
ret = ret.substring(0, i);
}
return ret;
};
this.setRequestHeader = function(header, value) {
this._headers[this._headers.length] = {h:header, v:value};
};
this.open = function(method, url, async, user, password) {
this.method = method;
this.url = url;
this._async = true;
this._aborted = false;
this._headers = ;
if (arguments.length >= 3) {
this._async = async;
}
if (arguments.length > 3) {
opera.postError('XMLHttpRequest.open() - user/password not
supported');
}
this.readyState = 1;
if (this.onreadystatechange) {
this.onreadystatechange();
}
};
this.send = function(data) {
if (!navigator.javaEnabled()) {
alert("XMLHttpRequest.send() - Java must be installed and
enabled.");
return;
}
if (this._async) {
setTimeout(this._sendasync, 0, this, data);
// this is not really asynchronous and won't execute until the
current
// execution context ends
} else {
this._sendsync(data);
}
}
this._sendasync = function(req, data) {
if (!req._aborted) {
req._sendsync(data);
}
};
this._sendsync = function(data) {
this.readyState = 2;
if (this.onreadystatechange) {
this.onreadystatechange();
}
// open connection
var url = new java.net.URL(new java.net.URL
(window.location.href), this.url);
var conn = url.openConnection();
for (var i = 0; i < this._headers.length; i++) {
conn.setRequestProperty(this._headers[i].h, this._headers
[i].v);
}
this._headers = ;
if (this.method == 'POST') {
// POST data
conn.setDoOutput(true);
var wr = new java.io.OutputStreamWriter(conn.getOutputStream
(), this._getCharset());
wr.write(data);
wr.flush();
wr.close();
}
// read response headers
// NOTE: the getHeaderField() methods always return nulls for
me
var gotContentEncoding = false;
var gotContentLength = false;
var gotContentType = false;
var gotDate = false;
var gotExpiration = false;
var gotLastModified = false;
for (var i = 0; ; i++) {
var hdrName = conn.getHeaderFieldKey(i);
var hdrValue = conn.getHeaderField(i);
if (hdrName == null && hdrValue == null) {
break;
}
if (hdrName != null) {
this._headers[this._headers.length] = {h:hdrName,
v:hdrValue};
switch (hdrName.toLowerCase()) {
case 'content-encoding': gotContentEncoding = true; break;
case 'content-length' : gotContentLength = true; break;
case 'content-type' : gotContentType = true; break;
case 'date' : gotDate = true; break;
case 'expires' : gotExpiration = true; break;
case 'last-modified' : gotLastModified = true; break;
}
}
}
// try to fill in any missing header information
var val;
val = conn.getContentEncoding();
if (val != null && !gotContentEncoding) this._headers
[this._headers.length] = {h:'Content-encoding', v:val};
val = conn.getContentLength();
if (val != -1 && !gotContentLength) this._headers
[this._headers.length] = {h:'Content-length', v:val};
val = conn.getContentType();
if (val != null && !gotContentType) this._headers
[this._headers.length] = {h:'Content-type', v:val};
val = conn.getDate();
if (val != 0 && !gotDate) this._headers[this._headers.length] =
{h:'Date', v:(new Date(val)).toUTCString()};
val = conn.getExpiration();
if (val != 0 && !gotExpiration) this._headers
[this._headers.length] = {h:'Expires', v:(new Date(val)).toUTCString
()};
val = conn.getLastModified();
if (val != 0 && !gotLastModified) this._headers
[this._headers.length] = {h:'Last-modified', v:(new Date
(val)).toUTCString()};
// read response data
var reqdata = '';
var stream = conn.getInputStream();
if (stream) {
var reader = new java.io.BufferedReader(new
java.io.InputStreamReader(stream, this._getCharset()));
var line;
while ((line = reader.readLine()) != null) {
if (this.readyState == 2) {
this.readyState = 3;
if (this.onreadystatechange) {
this.onreadystatechange();
}
}
reqdata += line + '\n';
}
reader.close();
this.status = 200;
this.statusText = 'OK';
this.responseText = reqdata;
this.readyState = 4;
if (this.onreadystatechange) {
this.onreadystatechange();
}
if (this.onload) {
this.onload();
}
} else {
// error
this.status = 404;
this.statusText = 'Not Found';
this.responseText = '';
this.readyState = 4;
if (this.onreadystatechange) {
this.onreadystatechange();
}
if (this.onerror) {
this.onerror();
}
}
};
};
}
function startClock(namedata,rowsdata){
alert(namedata);
setTimeout("startClock()", 2000);
getNames(namedata);
getRows(rowdata);
}
var req;
function getNames(namedata){
req = new XMLHttpRequest();
if(req){ req.onreadystatechange=processReqChange1;
try{
req.open('GET', namedata);
req.setRequestHeader('If-Modified-Since' ,'Sat, 1 Jan 1900
00:00:00 GMT');
req.send("");
}catch(e){
alert(e);
}
}
}
function getRows(rowdata){
req = new XMLHttpRequest();
if(req){ req.onreadystatechange=processReqChange2;
try{
req.open('GET', rowdata);
req.setRequestHeader('If-Modified-Since' ,'Sat, 1 Jan 1900
00:00:00 GMT');
req.send("");
}catch(e){
alert(e);
}
}
}
function processReqChange1(){
if(req.readyState == 4 && (req.status == 200 || req.status == 304)){
var rows = eval(req.responseText);
var html = "<br><br><table>";
for(r in rows){
if(rows[r].status=="-1")
html+="<tr><td><FONT COLOR=\"#4B7399\">"+rows[r].order+". "+rows
[r].username+"</FONT></td></tr>";
else if(rows[r].status=="0")
html+="<tr><td>"+rows[r].order+". "+rows[r].username+"</td></tr>";
else
html+="<tr><td bgcolor=\"#4B7399\"><FONT COLOR=\"#FFFFFF\">"+rows
[r].order+". "+rows[r].username+"</td></tr>";
}
html+="</table>";
document.getElementById("rowsdata").innerHTML = html;
}
}
function processReqChange2(){
if(req.readyState == 4 && (req.status == 200 || req.status == 304)){
var rows = eval(req.responseText);
var html=rows[0].totals+" ups for today for <b><u>"+rows[0].room
+"</b></u><br><br><table>";
html+="<tr align=\"center\" valign=\"top\" bgcolor=\"#C0C0C0\">";
html+="<th valign=\"top\" align=\"center\" bgcolor=\"#C0C0C0\"
#</th>";
html+="<th valign=\"top\" align=\"center\" bgcolor=\"#C0C0C0\"
Day</th>";
html+="<th valign=\"top\" align=\"center\" bgcolor=\"#C0C0C0\"
Time</th>";
html+="<th valign=\"top\" align=\"center\" bgcolor=\"#C0C0C0\"
Sensor</th>";
html+="<th valign=\"top\" align=\"center\" bgcolor=\"#C0C0C0\"
Heads</th>";
html+="<th valign=\"top\" align=\"center\" bgcolor=\"#C0C0C0\"
Associate</th>";
html+="<th valign=\"top\" align=\"center\" bgcolor=\"#C0C0C0\"
CXL</th>";
html+="<th valign=\"top\" align=\"center\" bgcolor=\"#C0C0C0\"
BB</th>";
html+="<th valign=\"top\" align=\"center\" bgcolor=\"#C0C0C0\"
TO</th>";
html+="<th valign=\"top\" align=\"center\" bgcolor=\"#C0C0C0\"
DR</th>";
html+="<th valign=\"top\" align=\"center\" bgcolor=\"#C0C0C0\"
OK</th>";
html+="</tr>";
var k=-1;
for(r in rows){
k++;
if(k>0){
html+="<tr>";
html+="<td>"+rows[r].dayno+"</td><td>"+rows[r].dof+"</
<td>"+rows[r].time+"</td><td>"+rows[r].sensor+"</td><td>"+rows
[r].hits+"</td><td>"+rows[r].assoc+"</td><td>"+"CXL";
if(rows[r].bb==-1)
html+="</td><td bgcolor=\"#FFFFFF\">"+"BB";
else if(rows[r].bb==1)
html+="</td><td bgcolor=\"#1F7F00\">"+"BB";
else
html+="</td><td>"+"BB";
if(rows[r].tor==-1)
html+="</td><td bgcolor=\"#FFFFFF\">"+"TO";
else if(rows[r].tor==1)
html+="</td><td bgcolor=\"#1F7F00\">"+"TO";
else
html+="</td><td>"+"TO";
if(rows[r].dr==-1)
html+="</td><td bgcolor=\"#FFFFFF\">"+"DR";
else if(rows[r].dr==1)
html+="</td><td bgcolor=\"#1F7F00\">"+"DR";
else
html+="</td><td>"+"DR";
html+="</td><td>"+"OK"+"</td>";
html+="</tr>";
}
}
html+="</table>";
document.getElementById("namesdata").innerHTML = html;
}
}