Javascript AJAX функция не загружается - PullRequest
0 голосов
/ 08 декабря 2008

У меня было простое ajax-приложение типа realtivley, которое я разбил на более модульные. Код приведен по ссылке ниже, и в основном я добавил функцию GetRecordSet и позволил fetchcompelte принять переменную, для которой слой должен помещать данные. Когда я вставляю alert (), кажется, что код выполняется, кроме как внутри любого из предложений if в fetchcomplete.

http://www.nomorepasting.com/getpaste.php?pasteid=22558

Это код для get_records.php, который опять-таки кажется, что все должно быть в порядке

http://www.nomorepasting.com/getpaste.php?pasteid=22559

и это оригинальный индексный файл php

http://www.nomorepasting.com/getpaste.php?pasteid=22560

Ответы [ 2 ]

0 голосов
/ 08 декабря 2008

Во-первых, я бы согласился с Shyam, а также установил Firebug для Firefox; это будет огромной помощью для отладки JavaScript.

в любом случае, линия

xmlHttp.onreadystatechange = FetchComplete(layername);

назначит результат FetchComplete(layername) на xmlHttp.onreadystatechange, а это не то, что вам нужно. Это должно быть

xmlHttp.onreadystatechange = FetchComplete;

Но тогда у вас есть проблема прохождения layername.

Если вы определяете onreadystatechange как анонимную внутреннюю функцию, вы можете легко использовать переменные, определенные вне ее, чтобы вы могли сделать что-то вроде этого:

function GetAuctionData(pk) {

    var xmlHttp=GetXmlHttpObject();
    var layer = "Layer2";

    if(xmlHttp==null) {
        alert("Your browser is not supported?");
    }

    var url="get_auction.php?";
    url=url+"cmd=GetAuctionData&pk="+pk;
    url=url+"&sid="+Math.random();

    xmlHttp.onreadystatechange = function() {
        if(xmlHttp.readyState==4 || xmlHttp.readyState=="complete") {
            document.getElementById(layer).innerHTML=xmlHttp.responseText
        } else if (xmlHttp.readyState==1 || xmlHttp.readyState=="loading") {
            document.getElementById(layer).innerHTML="loading"
        }
    };

    xmlHttp.open("GET",url,true)
    xmlHttp.send(null)
}

layer определен как локальная переменная в GetAuctionData (), но доступен в анонимной функции, потому что вы создаете Closure. Обратите внимание, что я не тестировал вышеуказанную функцию, но она должна работать в принципе.

0 голосов
/ 08 декабря 2008

Я бы предложил вам использовать prototypejs из http://www.prototypejs.org,, который бы абстрагировал все проверки статуса в вашем коде, упростил бы его и избавил от беспорядка.

Если по какой-то причине вы предпочитаете использовать свой собственный код, избегайте использования строковых значений для свойства readyState объекта XMLHttpRequestObject. Используйте следующую таблицу вместо

 State Description 
   0   The request is not initialized 
   1   The request has been set up 
   2   The request has been sent 
   3   The request is in process 
   4   The request is complete

и чек.

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