Ajax请求无法正常工作。 onSuccess和onFailure不会触发

时间:2010-03-24 11:02:02

标签: javascript ajax prototypejs

尝试制作一个递归调用函数的页面,直到达到限制然后停止。它使用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行

2 个答案:

答案 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(...。不确定是否重要,但是......

(* 虽然路径中的大写字母看起来有点可疑;但并不是真的错了,但看起来你可能会不小心将第一个字母大写。通常最好不要在网址中要求大写字母以防某些浏览器使用它。