#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);