2010-03-24 268 views
0

试图创建一个页面,递归调用一个函数,直到达到限制,然后停止。它使用ajax查询来调用一个外部脚本(它现在只是回声的“完成”),onSuccess或onFailure都没有触发,我发现很难找到问题。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> 

歌剧错误控制台

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

什么Ajax库您使用?你看到你的回声呼叫吗? – mojbro 2010-03-24 11:06:06

+0

不是回声呼叫不会发生在第一个之外。并没有任何警报工作。 了AJAX脚本我用的是 /*原型JavaScript框架,版本1.6.1 *(C)2005-2009萨姆·斯蒂芬森 * *原型是自由发布的,基于MIT式的授权条款。 *有关详细信息,请参阅原型网站:http://www.prototypejs.org/ * * ------------------------- ------------------------------------------------- */ – Kye 2010-03-24 11:17:40

+0

retag:added prototypejs – 2010-03-24 11:27:48

回答

0

我没有注意到你的代码有什么明显的错误*。但最后一次警报(通话结束后)不会触发的事实是一个非常好的指示,表明通话导致javascript引擎失败。你有没有尝试过使用萤火虫(或类似),看看控制台上发生了什么?

onSuccess和onFailure回调只会在调用被实际触发时才会被调用。如果脚本触发了一个异常,或者(因为JavaScript通常是直接解释的)遇到语法错误等,脚本引擎通常会停止运行该脚本,并向javascript控制台弹出一条错误消息(浏览器显然不是全部显示)。如果脚本在通话之前或通话中停止,回调当然不会触发。

编辑: 听起来像你意外地使用未初始化的变量,不知何故。尝试双重检查您是否已正确输入所有变量(包括大小写)。不知道发生了什么,因为我无法看到第89行的内容......

编辑:我刚刚注意到,你写Ajax.Request(...new Ajax.Request(...如在the prototype site教程。不知道是否重要,虽然...

(* 虽然路径中的大写字母看起来有点可疑;没有真正错误,但可能看起来像你不小心uppercased的第一个字母通常最好不要求大写在网址中的情况下,一些浏览器munges它。

+0

我大写文件夹名称,而不是文件。只是帮助我添加区别于什么。 – Kye 2010-03-24 12:14:53

+0

的JavaScript - HTTP://localhost/inv/Upload/upload.php 事件线程:负载 错误: 名称:类型错误 消息:行89声明:无法转换未定义或为空到对象 堆栈跟踪:N/A;请参阅opera:config#UserPrefs | Exceptions Stacktrace 是什么意思? – Kye 2010-03-24 12:37:36

+0

我把新出来,因为JSLint的告诉我:P – Kye 2010-03-24 14:00:07

0

Any help or advice will be most appreciated.

OK ;-)

我给你的建议的第一位的是,“我知道了ajax .js正如我在另一个网站上使用过的那样“是一个自我造成的盲点。第二,虽然它看起来可能会给你有效的结果,但你应该声明Rooms作为一个数字,例如, var Rooms = 1;或在比较之前将其转换为int x < parseInt(Rooms,10);

三是风格问题,但通常局部变量是骆驼套管(myVar的),而命名空间和功能/那是为了被实例化类是帕斯卡套管(室)。

现在,对于问题:除上述提到的代码外,该代码似乎是有效的。因此,这留下了Ajax.Request由于该脚本或调用约定中的缺陷而无法失败的结论。 (见建议#1)

与给出的信息,就我可以采取这个答案。

祝你好运。

+0

Ops,删除了“”。忘了检查他们,当我从最后一个工作脚本中复制它,我使用了这些函数。虽然没有修复它:( – Kye 2010-03-24 11:43:58

+0

@凯尔,那么,因为你的脚本似乎解析好了,你正在接触到最初的ajax调用,事情是肯定会非常错误的Ajax.Request的为您onFailure处不会被调用尝试使用Firebug来看看在控制台报告的错误 – 2010-03-24 12:27:19

+0

的JavaScript - HTTP:。//localhost/inv/Upload/upload.php 活动主题:负载 错误: 名称:类型错误 消息:行89声明:无法转换未定义或为空到对象 堆栈跟踪:N/A;看戏:配置#用户首选项|异常都有堆栈跟踪 意味着什么 – Kye 2010-03-24 12:36:49