Помогите с Ajax
11 повідомлень
#17 років тому
Здравствуйте!На днях начал изучать Ajax и сразу начались проблемы

По книге написал код,который обращается к скрипту php за информацией и выводит ответ,но он не работает,не знаю почему,кто знает помогите пожалуйста,заранее благодарен!
Вот код:
script.php
<?php
header("Content-Type=text/xml");
print("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>");
print("<response>");
$name=$_GET;
$username=array("Cristina","Maksim","Dima","Vasya");
if(in_array($name,$username)){
print("Прив $name!");}
else{
if(trim($name)==""){
print("Ты кто?");}
else{
print("я тебя не знаю!");
}}
print("</response>");
?>
script.js
var xmlHttp = createXmlHttpRequestObject();
function createXmlHttpRequestObject()
{
var xmlHttp;
if(window.ActiveXObject)
{
try
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
xmlHttp=false;
}
}
else
{
try
{
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
xmlHttp=false;
}
}
if(!xmlHttp)
{
alert("Ошибка создания обьекта");
}
else
{
return xmlHttp;
}
}
function process(){
if(xmlHttp.readyState==4 || xmlHttp.readyState==0)
{
name=encodeURIComponent(document.getElementById("myName").value);
xmlHttp.open("GET","script.php?name="+name,true);
xmlHttp.onreadystatechange=handleServerResponse;
xmlHttp.send(null);
}
else
{
setTimeout('process()',1000);
}
}
function handleServerResponse()
{
if(xmlHttp.readyState==4)
{
if(xmlHttp.status==200)
{
xmlResponse=xmlHttp.responseXML;
xmlDocumentElement=xmlResponse.documentElement;
message2=xmlDocumentElement.firstChild.data;
document.getElementById("divMessage").innerHTML='<i>'+message2'</i>';
setTimeout('process()',1000);
}
}
else
{
alert('Проблемы!'+xmlhttp.statusText);
}
}
index.html
<html>
<head>
<title>Пример 1</title>
<script type="text/javascript" src="script.js"></script>
</head>
<body onload="process();">
Введите ваше имя:
<input type="text" id="myName"></br>
<div id="divMessage"/>
</body>
</html>
1410 повідомлень
#17 років тому
Оффтопик
<div id="divMessage"/> <-- это как? Никогда не думал, что див - это одиночный тег 

Подсказка: отлаживайте скрипт через alert. Передаете данные - проверьте, что они передаются. Если алерт не вывелся - значит где-то ошибка в жс-коде - открываете джаваскрипт консоль и смотрите где ошибка.
105 повідомлень
#17 років тому
Не морочьте себе голову, возьмите готовую библиотеку, jQuery например.Зачем писать кучу кода когда уже всё написанно ??
2195 повідомлень
#17 років тому
Писать кучу незачем, а знать основы нужно.
589 повідомлень
#17 років тому
Sir_Michael, Это не основы. Основы - это ассемблер.Я этих основ не знаю и знать не хочу, а AJAX сайты пишу как-то.
neznika, 1) не надо использовать XML в ответах на ajax запросы - проще json (посилання) . 2) присоединяюсь к совету использовать jQuery , тогда по минимуму будет тот же Ваш пример на клиентсоой стороне:
$.getJSON("ajax.php", function(json){
alert("JSON Data: " + json.name);
$('#myName').val(json.name);
});
Если обработку ошибок добавить, то чуть сложнее, конечно.
130 повідомлень
#17 років тому
Да нет...... ребята, основу нужно знать. А то сейчас начнеться: что и JavaScript не нужно знать, и CSS не нужно знать, и xHtml не нужно знать... и вообще на уровень FrontPage выйдете.
589 повідомлень
#17 років тому
Недо несколько разграничивать "основу" и "всё" - MSDN читать по поводу каждого пука? А работать когда?Нет, некоторые редкие ошибки, конечно, надо уметь находить - например, мой код
$.getJSON("ajax.php", function(json){ ... });
имеет потенциальную проблему, но на чём-то надо останавливаться.
130 повідомлень
#17 років тому
Я вот прочитал десятки... почти сотни статей про Ajax, рассмотрел кучу неработоспособных и работающих примеров. В итоге из полученных знаний сформировал свой мини-движок размером на 2 кб... и сейчас его везде где нужно использую ... и кроссбраузерно работает.. и с кодировками нет проблемы... и вызов тоже в одну строчку помещается.
589 повідомлень
#17 років тому
Свой это здорово. 1) а когда новый браузер появится кто это движок будет править? Так что всё это только для себя любимого. Да и кроме ajax ещё куча есть проблем - например что с данными потом делать. В библиотеках в основном обработка данных, ajax так, на полуавтомате добавляют.
49 повідомлень
#17 років тому
Pilat66 Вот такой вопрос, в какой кодировке можно получать данные от XMLHttpRequest? Никакой jQuery не ответит на этот вопросДля отладки стоит использовать Firebug для Firefox, также стоит посмотреть просто, что отдает script.php?name=Vasya
header("Content-Type=text/xml");
неправильный заголовок, правильный:
header("Content-Type: text/xml");
document.getElementById("divMessage").innerHTML='<i>'+message2'</i>';
правильно:
document.getElementById("divMessage").innerHTML='<i>'+message2+'</i>';
после этого все работает
Смотрите несколько раз ваш код, прежде чем паниковать

589 повідомлень
#17 років тому
Цитата ("Vadyacorp"):Pilat66 Вот такой вопрос, в какой кодировке можно получать данные от XMLHttpRequest? Никакой jQuery не ответит на этот вопрос
Надо ещё у Путина спросить в какой кодировке, может он знает.
49 повідомлень
#17 років тому
Pilat66 XMLHttpRequest всегда отсылает POST данные в UTF8 - вот это основа, который не каждый знает, еще таких основ множество, как со стороны clientside, так и с serverside
15 повідомлень
#17 років тому
Цитата ("Pilat66"):Свой это здорово. 1) а когда новый браузер появится кто это движок будет править? Так что всё это только для себя любимого. Да и кроме ajax ещё куча есть проблем - например что с данными потом делать. В библиотеках в основном обработка данных, ajax так, на полуавтомате добавляют.
а если тот же jQuery с новым браузером глючить начнет, сам то без знаний ниче подправить не сможешь, и придется терпиливо ждать пока разработчики все исправят
589 повідомлень
#17 років тому
Они исправят, и быстро. А свой не исправит никто кроме автора, а на него полагаться нельзя.
589 повідомлень
#17 років тому
Цитата ("Vadyacorp"):Pilat66 XMLHttpRequest всегда отсылает POST данные в UTF8 - вот это основа, который не каждый знает, еще таких основ множество, как со стороны clientside, так и с serverside
Вы знаете, это всё мелочи, и проблемы не с кодировками.
1895 повідомлень
589 повідомлень
#17 років тому
Котеров любит изобретать велосипед. Может быть, в 2006-м году это было актуально, но сейчас не 2006-й год, PHP давно умеет формировать JSON, prototype сам умеет работать с AJAX - вывод однозначный, библиотека эта малоинтересна. Опять же вопрос, будет ли она развиваться.
49 повідомлень
#17 років тому
Pilat66 По сути да, мелочь, но когда я в первый раз столкнулся с этой проблемой, пришлось таки лезть в спецификации XMLHttpRequest объекта 
jshttprequest пробовал, также пробовал xajax - не впечатлило абсолютно, гораздо лучше писать самому передачу данных со стороны serverside, а в качестве клиента использовать любой фреймворк
1895 повідомлень
#17 років тому
Ну почему велосипед, вот возмём денвер, вещь прекрасная, ну а что било в ПХП в 2006 году даже и не знаю)Основное приемущество этой библиотеки:
- полная кросбраузерность (лично проверял, пашет всюда и без проблем)
- легкость отладки (очень понравилось, класно сделали)
- следя за СВН-кой, то... проект живет и розвивается, примерно 2 раза в месяц вносят правки
- полная поддержка UTF-8, или любой другой кодировки (можно указивать самому)
- меньше надо писать странного кода, вместо:
var xmlHttp = createXmlHttpRequestObject();
function createXmlHttpRequestObject()
{
var xmlHttp;
if(window.ActiveXObject)
{
try
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
xmlHttp=false;
}
}
else
{
try
{
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
xmlHttp=false;
}
}
if(!xmlHttp)
{
alert("Ошибка создания обьекта");
}
else
{
return xmlHttp;
}
просто пишу:
$JsHttpRequest =& new JsHttpRequest("windows-1251");
и никакых CDATA///