Использование XMLHttpRequest для разработки расширений Mozilla

#javascript #ajax #firefox

#javascript #ajax #firefox

Вопрос:

У меня возникли некоторые проблемы с вызовом php-файла с использованием Ajax в моем расширении Mozilla. Javascript (Ajax) и php оба расположены в каталоге / myextension / content, я вызываю php с помощью

 
function ajaxFunction(){
    var req = new XMLHttpRequest();
    req.open('GET', 'myphp.php', true);
    req.onreadystatechange = function (aEvt) {
      if (req.readyState == 4) {
         if(req.status == 200)
          alert(req.responseText);
         else
          alert("Errorn");
      }
    };
    req.send(null);
}

и мой php выглядит как

 
<? php 
echo "Server Received with thanks!";
?>
  

Я продолжаю получать «alert («Ошибка n»);».
Я сделал что-то не так?

Комментарии:

1. Вы на самом деле используете PHP-сервер?

2. Пытаюсь предупредить о чем-то более полезном, чем «Ошибка», например, о коде состояния HTTP. Это даст вам некоторую информацию. В качестве альтернативы, просто попробуйте загрузить страницу непосредственно в браузере и посмотрите, что вы получите.

3. Спасибо, просто прочитал страницу ( developer.mozilla.org/En/Using_XMLHttpRequest ) снова и пропустил пример «синхронного запроса без HTTP». Итак, что у меня есть, это прочитать файл из локальной файловой системы и status == 0 для успеха. Что мне действительно нужно, так это сделать запрос к серверу из javascript в расширении и получить ответ, как написал Мэтт, PHP-сервер вообще не запущен. Есть ли другой способ, которым я могу взаимодействовать с внутренним сервером при разработке расширения?

4. Я нашел code.google.com/p/json-xml-rpc , надеюсь, это удовлетворит мои запросы.

Ответ №1:

Хорошо отформатированный Ajax-код для Firefox:

 var URL="http://yourdomain.com/Work.php?val=Test";
var objXmlHttp = null;

try 
{
    objXmlHttp = new XMLHttpRequest();
}
catch(e)
{return;}

objXmlHttp.onreadystatechange=function()
{
    if ((objXmlHttp.readyState == 4 || objXmlHttp.readyState == "complete") amp;amp; objXmlHttp.status == 200)
    {
        //Write code for success
    }
    else if (objXmlHttp.status == 404)
    {
        //OnError
    }
    else 
    {
        //OnWait
    }
}

objXmlHttp.open("GET", URL, true);
objXmlHttp.send(null);