尝试制作一个递归调用函数的页面,直到达到限制然后停止。它使用ajax查询来调用外部脚本(现在只是回显“完成”),无论是onSuccess还是onFailure触发我都发现很难找到问题。
这是javascript。在网页的标题中,有一个包含请求数据的ajax.js文档的脚本。我知道ajax.js的作品就像我在其他网站上使用它一样
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>National Lettings Inventories</title>
<link type="text/css" href="/inv/default.css" rel="stylesheet" />
<script type="text/javascript" src="/inv/includes/swfobject.js"></script>
<script type="text/javascript" src="/inv/includes/ajax.js"></script>
<script type="text/javascript">
swfobject.registerObject("myFlashContent", "9.0.0");
</script>
</head>
<body onload="start()">
<div id="topBar">
<div class="logo">
</div>
</div>
<div id="Body">
<script type="text/javascript">
<!--
var rooms = 1;
var items = 0;
var ccode = "9999/1";
var x = 0;
function echo(string,start){
var ajaxDisplay = document.getElementById('ajaxDiv');
if(start)
{ajaxDisplay.innerHTML = string;}
else
{ajaxDisplay.innerHTML = ajaxDisplay.innerHTML + string;}
}
function locations()
{
echo("Uploading location "+x+" of " + rooms,true);
Ajax.Request("Perform/location.php",
{
method:'get',
parameters: {ccode: ccode, x: x},
onSuccess: function(reply)
{alert("worked");
if(x<rooms)
{
x++;
locations();
}
else
{
x=0;
echo("Done",true);
}
},
onFailure: function()
{alert("not worked");
echo("not done");
}
});
alert("boo");
}
function start()
{locations();}
//-->
</script>
Uploading
<div id='ajaxDiv'>
</div>
</div>
<div class="link" id="bottom">
<a href="index.php" ><img src="/inv/images/back.gif" class="link" alt="BACK"/></a>
</div>
<div id="bottomBar">
<p>Copyright © 2010 National Lettings Inventories</p>
</div>
</body>
</html>
Opera错误控制台
JavaScript - http://localhost/inv/Upload/upload.php
Event thread: load
Error:
name: TypeError
message: Statement on line 89: Cannot convert undefined or null to Object
stacktrace: n/a; see opera:config#UserPrefs|Exceptions Have Stacktrace
非常感谢任何帮助或建议。
编辑:添加了整个页面源代码,虽然这里没有第89行
答案 0 :(得分:0)
任何帮助或建议都是最重要的 赞赏。
好的; - )
我会给你的第一点建议是'我知道ajax.js的作用,因为我在另一个网站上使用它'是一个自我造成的盲点。
其次,虽然它似乎可以为您提供有效的结果,但您应该将Rooms
声明为数字,例如var Rooms = 1;
或在比较之前将其投射到int,例如x < parseInt(Rooms,10);
第三,这是一个风格问题,但通常局部变量是骆驼(myVar),而要实例化的名称空间和函数/类是pascal cased(Room)。
现在,问题是:除了上面提到的代码之外,发布的代码似乎是有效的。因此,这得出结论Ajax.Request
由于该脚本或调用约定中的缺陷而无声地失败。 (见建议#1)
根据所提供的信息,这就是我可以接受这个答案。
祝你好运。答案 1 :(得分:0)
我没有发现任何明显错误的代码*。但是最后一次警报(通话后)没有触发的事实是一个非常好的指标,表明该呼叫导致javascript引擎失败。您是否尝试使用firebug(或类似)并查看控制台上发生了什么?
只有在实际触发调用时才会调用onSuccess和onFailure回调。如果脚本触发异常,或者(因为javascript通常直接解释)遇到语法错误等,脚本引擎通常会停止运行脚本并向javascript控制台弹出错误消息(浏览器显然不会显示它)。如果脚本在调用之前或期间停止,则回调当然不会触发。
修改强>: 听起来你不小心意外地使用了一个未初始化的变量。尝试仔细检查您是否正确输入了所有变量(包括大小写)。不确定发生了什么事,因为我看不出第89行的内容......
编辑:我刚刚注意到,您已经在the prototype site的教程中写了Ajax.Request(...
而不是new Ajax.Request(...
。不确定是否重要,但是......
(* 虽然路径中的大写字母看起来有点可疑;但并不是真的错了,但看起来你可能会不小心将第一个字母大写。通常最好不要在网址中要求大写字母以防某些浏览器使用它。 )