Запрос Ajax не работает. onSuccess и onFailure не запускаются - PullRequest
0 голосов
/ 24 марта 2010

пытается создать страницу, которая будет рекурсивно вызывать функцию до тех пор, пока не будет достигнут предел, а затем остановится. Он использует ajax-запрос для вызова внешнего скрипта (который пока только повторяет "done"), однако без запуска 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 Error Console

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 голосов
/ 24 марта 2010

Я не замечаю ничего плохого в вашем коде *. Но тот факт, что последнее оповещение (после вызова) не срабатывает, является довольно хорошим показателем того, что вызов вызвал сбой движка javascript. Вы пытались использовать firebug (или аналогичный) и посмотреть, что происходит на консоли?

Обратные вызовы onSuccess и onFailure будут вызываться только в том случае, если вызов фактически сработал. Если сценарий вызывает исключение или (поскольку javascript обычно интерпретируется напрямую), обнаруживает синтаксическую ошибку и т. Д., Механизм сценария обычно останавливает выполнение сценария и выдает сообщение об ошибке в консоль javascript (которая не всегда явно указывается браузером ). Если сценарий останавливается до или во время вызова, обратные вызовы, конечно, не сработают.

EDIT : Похоже, вы случайно используете неинициализированную переменную. Попробуйте дважды проверить, правильно ли вы ввели все переменные (включая регистр). Не совсем уверен, что происходит, потому что я не вижу, что на линии 89 ...

РЕДАКТИРОВАТЬ : Я только что заметил, что вы написали Ajax.Request(..., а не new Ajax.Request(..., как в учебнике по прототипу сайта . Не уверен, если это имеет значение, хотя ...

(* Хотя заглавная буква в пути выглядит несколько подозрительно; на самом деле это не так, но может показаться, что вы случайно прописали первую букву в верхнем регистре. Обычно лучше не требовать прописных букв в URL, если какой-то браузер их взломал. )

0 голосов
/ 24 марта 2010

Любая помощь или совет будут наиболее оценили.

ОК; -)

Первый совет, который я бы дал вам, заключается в том, что «я знаю, что ajax.js работает, поскольку я использовал его на другом веб-сайте», - это слепое пятно, наложенное на себя.

Во-вторых, хотя может показаться, что вы получите действительные результаты, вы должны либо объявить Rooms как число, например, var Rooms = 1; или приведите его к int перед сравнением, например x < parseInt(Rooms,10);

В-третьих, это вопрос стиля, но обычно локальные переменные заключаются в верблюжий регистр (myVar), а пространства имен и функции / классы, которые должны быть созданы, - в паскаль (Room).

Теперь к проблеме: размещенный код, отличный от указанного выше, представляется действительным. Таким образом, это оставляет вывод, что Ajax.Request молча терпит неудачу либо из-за дефекта в этом скрипте, либо в соглашении о вызовах. (см. совет № 1)

С предоставленной информацией, насколько я могу принять этот ответ.

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...