PHP + ajax - проблема
{var XMLHttpRequestObject=false;
if(window.XMLHttpRequest)
{
XMLHttpRequestObject=new XMLHttpRequest();
}
else if(window.ActiveXObject)
{
XMLHttpRequestObject=new ActiveXObject('Microsoft.XMLHTTP');
}
if(XMLHttpRequestObject)
{
var obj=document.getElementById('mycaptcha');
XMLHttpRequestObject.open("POST", "checkandreg.php", true);
XMLHttpRequestObject.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
XMLHttpRequestObject.onreadystatechange=function()
{
if(XMLHttpRequestObject.readyState==4 && XMLHttpRequestObject.status==200)
{
obj.innerHTML=XMLHttpRequestObject.responseText;
XMLHttpRequestObject.send("keystring="+document.getElementByName('keystring').value);
}
}
}
XMLHttpRequestObject.send("keystring="+document.getElementByName('keystring').value);
XMLHttpRequestObject.send(null);
}
Код, правда, кривовато вставился. В общем, все доходит до XMLHttpRequestObject.onreadystatechange=function(), а уже внутри этой колбэк-функции ничего не работает.
P.S. Скрипт php рабочий, проверял.
Странно. Что я делаю не так:
url: "checkandreg.php",
async: true,
data: "keystring="+document.getElementByName("keystring"),
success: function(msg){alert("Data saved: "+msg);
}
}
).responseText>
{
return "register(1);"
}
else
{
return "alert('Wrong code!');document.getElementByName('keystring').value='';";
}
Почему-то session_start() не работает, а мне впадлу сегодня с ним разбираться, поэтому решил сделать проверку капчи через куку. Не пинайте.
Не пойму, правда, зачем php. Он работает прекрасно, я же уже говорил. Хоть phpinfo() напиши, все равно через ajax не работает.
P.S. с echo и print разницы нет, хоть document.write писать, хоть phpinfo, все равно он не работает.
P.S. Не работало - значит не выполнялся скрипт, и в функции, выполняющий post-запрос не выскакивали алерты. Да что тут непонятного? Вы же не задаете себе вопрос, почему ls > /dev/null не выводит на экран?
Во-вторых я вам уже сказал что нужно делать ВЫВОД текста в пхп скрипте, а не делать return! Вы что, вызываете из JS функцию php, из которой ожидаете получить данные, используя return???
Вы шлёте запрос скрипту, и ответ вы будете получать в виде текста, которым пхп скрипт ответит на ваш запрос! А для того что-бы он на него ответил - нужен не return а echo (или print).
Если-же у вас ВООБЩЕ ничего не работает - то покажите полностью весь код вашей страницы (со всем html и js).
Во-вторых я вам уже сказал что нужно делать ВЫВОД текста в пхп скрипте, а не делать return! Вы что, вызываете из JS функцию php, из которой ожидаете получить данные, используя return???
Вы шлёте запрос скрипту, и ответ вы будете получать в виде текста, которым пхп скрипт ответит на ваш запрос! А для того что-бы он на него ответил - нужен не return а echo (или print).
Если-же у вас ВООБЩЕ ничего не работает - то покажите полностью весь код вашей страницы (со всем html и js).
Я же уже объяснял, что НИКАК не работает php-скрипт, независимо от того, что в нем. Я писал всегда print, т.к. он, по идее, должен работать. Но он не работает. Я, конечно, понимаю, что только функция может возвращать значение, но этот PHP мне снес мозг так, что я уже подумал, что и return можно где угодно ставить. Как я уже говорил - ЧТО только не пиши в php-скрипте - он не работает. Уже пишу это в четвертый раз. Когда Вы поймете? Не работает AJAX, а не PHP.
Весь код страницы я писать не буду, я приведу две формы - в который обычным способом ajax работает и эту, в которой нет.
1. Не работает:
Username:<br>
<input type=text size=30 id="namel">
<br>Password:<br>
<input type=password size=30 id="passwdl">
<br>
<br>
Enter text shown below:<br>
<img src="kcaptcha/index.php?<?php echo session_name()?>=<?php echo session_id()?>"></img>
<br><br>
<input type=text name="keystring"><br>
<input type=button value=Register onClick=$.ajax
(
{
type: "POST",
url: "checkandreg.php",
async: true,
data: "keystring="+document.getElementByName("keystring")
}
).responseText></form>
</div>
2. Работает:
Username:<br>
<input type=text size=30 id="namel">
<br>Password:<br>
<input type=password size=30 id="passwdl">
<br>
<input type=button value=Login onClick="send()"><br><br>
<input type=button value=Register onClick="register(0)" id='btnregn'>
</a>
</div>
3. Работающий JS-ajax:
{
var XMLHttpRequestObject=false;
if(window.XMLHttpRequest)
{
XMLHttpRequestObject=new XMLHttpRequest();
}
else if(window.ActiveXObject)
{
XMLHttpRequestObject=new ActiveXObject('Microsoft.XMLHTTP');
}
if(XMLHttpRequestObject)
{
var obj=document.getElementById("adm");
XMLHttpRequestObject.open("POST", "login.php", true);
XMLHttpRequestObject.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
XMLHttpRequestObject.onreadystatechange=function()
{
if(XMLHttpRequestObject.readyState==4 && XMLHttpRequestObject.status==200)
{
obj.innerHTML=XMLHttpRequestObject.responseText;
}
}
}
var n=document.getElementById('namel').value;
var p=document.getElementById('passwdl').value
XMLHttpRequestObject.send("name="+n+"&passwd="+p);
XMLHttpRequestObject.send(null);
}
4. Не работающий ajax в двух вариантах выше в постах.
P.S. Не работало - значит не выполнялся скрипт, и в функции, выполняющий post-запрос не выскакивали алерты. Да что тут непонятного? Вы же не задаете себе вопрос, почему ls > /dev/null не выводит на экран?
Товарищ, а не подскажешь, что за интересная порча getElementByName ? Новое слово в JavaScript?
Да, новое слово. Во-первых, оно у меня всегда работает(что, судя по тебе, странно), мало того, во всех браузерах ! Во-вторых, попробуй сам.
Специально сходил на msdn. Одно из двух: либо ты меня обманываешь, либо microsoft всех за нос водит. Нету у document метода getElementByName.
http://msdn.microsoft.com/en-us/library/aa752641(v=VS.85).aspx
http://msdn.microsoft.com/en-us/library/aa752574(v=VS.85).aspx
http://msdn.microsoft.com/en-us/library/aa752541(v=VS.85).aspx
http://msdn.microsoft.com/en-us/library/aa752529(v=VS.85).aspx
http://msdn.microsoft.com/en-us/library/aa752514(v=VS.85).aspx
http://msdn.microsoft.com/en-us/library/cc288669(v=VS.85).aspx
Есть getElementsByName, есть getElementsByTagName, есть getElementById. Но нету getElementByName. Нет. Или всё таки micosoft врёт?
http://msdn.microsoft.com/en-us/library/aa752641(v=VS.85).aspx
http://msdn.microsoft.com/en-us/library/aa752574(v=VS.85).aspx
http://msdn.microsoft.com/en-us/library/aa752541(v=VS.85).aspx
http://msdn.microsoft.com/en-us/library/aa752529(v=VS.85).aspx
http://msdn.microsoft.com/en-us/library/aa752514(v=VS.85).aspx
http://msdn.microsoft.com/en-us/library/cc288669(v=VS.85).aspx
Есть getElementsByName, есть getElementsByTagName, есть getElementById. Но нету getElementByName. Нет. Или всё таки micosoft врёт?
Хе :) Ты только сейчас заметил, что водит? Уже лет 5, по крайней мере, пользуюсь этим методом. Попробуй сам. Или погугли хотя б. Есть он. А майки - они такие.
Так вот - ребят, простите, может быть, за грубость, но вы не поняли меня. Не работает именно ajax, а не php. Поэтому про php больше не спрашивайте.
а также возьми поставь на лису фаербаг и посомтри где ошибка. если в ЖС-е то ФаерБаг тебе ве выведет.
А лиса отстой.
Чтобы совсем уж убедить тебя в том, что водишь за нос ты нас тут, сделай следующее:
<button onclick="alert(document.getElementByName('probediv').innerHTML)">Нажимаем на кнопку и ищем probediv</button>
FireFox 3.6.9 сообщает: "Ошибка: document.getElementByName is not a function"
IE8 сообщает: "Объект не поддерживает это свойство или метод"
А где он у тебя и только у тебя работает?
Чтобы совсем уж убедить тебя в том, что водишь за нос ты нас тут, сделай следующее:
<button onclick="alert(document.getElementByName('probediv').innerHTML)">Нажимаем на кнопку и ищем probediv</button>
FireFox 3.6.9 сообщает: "Ошибка: document.getElementByName is not a function"
IE8 сообщает: "Объект не поддерживает это свойство или метод"
А где он у тебя и только у тебя работает?
Бред. Попробовал - и правда не работает. Но post-запрос отправляется. PHP его принимает. Как такое может быть?
Запрос-то отправляется, только посылаешь ты порожняк ему, а не содержимое keystring. Напиши data: "keystring="+document.getElementById("keystring").innerHTML, а то ты ему ещё ко всему прочему объект отправить пытаешься.
А насчет объекта - это почему? Я ему value передаю.
<input type=button value=Register onClick=$.ajax ( { type: "POST",
url: "checkandreg.php",
async: true,
data: "keystring="+document.getElementByName("keystring") } ).responseText></form>
Не заметил я там, что ты value передаёшь