LINUX.ORG.RU

ajax, XMLHttpRequest, error code 404


0

0

добавил на сайт немного ajax'a 
(скажем панель навигации в магазине)
но ИНОГДА возникает проблеммы, javascript пишет error 
status : 404 - not found,
что значит иногда ?
при клике на ссылку ajax может отработать нормально, а может выдать ошибку
вопрос по каким причинам она может возникнуть, и есть возможные пути решения.
(ps совсем новичек в ajax'e)

код ajax'a приведен ниже 

// Код вызова
var call_code;
// Объект класса XMLHttpRequest
var xmlHttp;

function CallServer(item,url,reload)
{
    // Если reload - false - то страница загружается в объект только если innerHTML у него пустой
    // Запоминаем код вызова
    call_code=item;
    // Если данных ещё нет, то подгружаем их
    if ((call_code!='') && 
        ((document.getElementById(item).innerHTML=='' || reload))
       )
    {
        // Если имеем дело не с InternetExplorer
        if (window.XMLHttpRequest) {
            xmlHttp = new XMLHttpRequest();
            // Открыть соединение с сервером
            xmlHttp.open("GET", url, true);
            // Установить функцию для сервера, которая выполнится после его ответа
            xmlHttp.onreadystatechange = updatePage;
            // SПередать запрос
            xmlHttp.send(null);
        }
        // Если имеем дело с InternetExplorer(он объект XMLHttpRequest имеет
        // в виде active-X компонента XMLHTTP)
        else if (window.ActiveXObject)
        {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            // Установить функцию для сервера, которая выполнится после его ответа
            xmlHttp.onreadystatechange = updatePage;
            // Открыть соединение с сервером
            xmlHttp.open("GET", url, true);
            // SПередать запрос
            xmlHttp.send();
        }

        // Включить индикатор загрузки
        loadPage();
    }
}

function updatePage() {
  if (xmlHttp.readyState == 4) {
    
        if (xmlHttp.status == 200) {
            // Если код ошибки - 200 подгружем ответ сервера в элемент HTML с
            // ID=call_code
            document.getElementById(call_code).innerHTML = xmlHttp.responseText;
        } else {
            alert("Не удалось получить данные:\n" + xmlHttp.statusText);
        }
    
  }
}


Ответ на: комментарий от ero-sennin

да просто тут статейка была про ajax,
(http://perpetum-mobile.ru/articles/cookbook/ajax/) я почитал и
решил, думаю, нужно воспользываться полученными знаниями,
ну и вот воспользывался на свою голову ((

зы а можно попросить слово любое заченить каким-нибудь более конкрет. термином ?

hose
() автор топика
Ответ на: комментарий от hose

> а можно попросить слово любое заченить каким-нибудь более конкрет. термином ?

Возьми любой js-фреймворк, именно это имелось в виду.. А уж какой, решать тебе: prototype, jQuery, DoJo, Yahoo! - выбирай любой :)

Лично я давно и успешно использую prototype

boombick ★★★★★
()

Это значит, что страница которую ты пытаешься загрузить не существует.
Попробуй вывести для отладки через alert url подгружаемой страницы.

---------------------
function CallServer(item,url,reload)
{
    //----------!!!!!!!!!!!!!!!!!-----------
    alert(url);
    //----------!!!!!!!!!!!!!!!!!-----------
    // Если reload - false - то страница загружается в объект только если innerHTML у него пустой
    // Запоминаем код вызова
    call_code=item;
---------------------

Скорее всего, по какой-то причине в эту функцию передаётся url несуществующей страницы. Проблема в коде вызова.

r_asian ★☆☆
()
Ответ на: комментарий от boombick

> Возьми любой js-фреймворк, именно это имелось в виду.. А уж какой, решать тебе: prototype, jQuery, DoJo, Yahoo! - выбирай любой :)

Всецело поддерживаю.

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

r_asian ★☆☆
()

Автору топика: буду признателен, если в jabber ты мне расскажешь о деталях столь странного поведения скрипта. Не исключено, что и в этих нескольких десятках строк кода затаился мерзкий баг :-).

r_asian ★☆☆
()
Ответ на: комментарий от boombick

что же это ты про mootools (http://mootools.net) забыл? библиотека эффектов там рвет script.aculo.us (который уже почти что синоним слова prototype) и dojo в клочья. и размер у нее маленький, что тоже радует.

barbuza
()
Ответ на: комментарий от barbuza

хотел выразить свою отдельную благодарность 2r_asian,
ну и 2barbuza, http://mootools.net - мне понравилось что она(он?)
умеет.

а вообще всем спасибо за ответы =)

hose
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.