Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

PHP + ajax - проблема

9.1K
14 сентября 2010 года
motorw
134 / / 15.12.2009
Такая проблема: при выполнении нижеприведенного кода не срабатывает php-скрипт. Совершенно необъяснимо почему. Другие скрипты работают, а этот нет, хотя полностью слизан с других, работающих.
Код:
function check()
{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 рабочий, проверял.
444
15 сентября 2010 года
patison
323 / / 15.03.2007
Немного не в тему, но почему-бы не воспользоваться jQuery? Код будет куда компактнее, и разбираться в нём будет куда проще.
9.1K
15 сентября 2010 года
motorw
134 / / 15.12.2009
Действительно не подумал. Прошу прощения.

Странно. Что я делаю не так:
 
Код:
onclick=$.ajax({type: "POST",
url: "checkandreg.php",
async: true,
data: "keystring="+document.getElementByName("keystring"),
success: function(msg){alert("Data saved: "+msg);
}
}
).responseText>
274
15 сентября 2010 года
Lone Wolf
1.3K / / 26.11.2006
пхп код в студию.
9.1K
15 сентября 2010 года
motorw
134 / / 15.12.2009
checkandreg.php
 
Код:
if($_COOKIE["captcha"]==$_POST["keystring"])
    {
        return "register(1);"
    }
    else
    {
        return "alert('Wrong code!');document.getElementByName('keystring').value='';";
    }

Почему-то session_start() не работает, а мне впадлу сегодня с ним разбираться, поэтому решил сделать проверку капчи через куку. Не пинайте.

Не пойму, правда, зачем php. Он работает прекрасно, я же уже говорил. Хоть phpinfo() напиши, все равно через ajax не работает.
444
15 сентября 2010 года
patison
323 / / 15.03.2007
Делай echo вместо return
9.1K
15 сентября 2010 года
motorw
134 / / 15.12.2009
Да скрипт-то все равно работает, неважно какой он. Не работает ajax, и именно почему-то в этой форме. Хотя во всех таких же работает.

P.S. с echo и print разницы нет, хоть document.write писать, хоть phpinfo, все равно он не работает.
444
15 сентября 2010 года
patison
323 / / 15.03.2007
А что значит "ajax не работает"? Не вызывается alert? Или msg пустой? Или что?
9.1K
15 сентября 2010 года
motorw
134 / / 15.12.2009
Так и понять, что не работает. Если я работал с javascript'овым ajax'ом (обычным способом), то читай первый пост, где не работало. Если с этим, то этот вообще никак не запускает скрипт, ни при событии success ничего не работает.

P.S. Не работало - значит не выполнялся скрипт, и в функции, выполняющий post-запрос не выскакивали алерты. Да что тут непонятного? Вы же не задаете себе вопрос, почему ls > /dev/null не выводит на экран?
444
15 сентября 2010 года
patison
323 / / 15.03.2007
Ну, для начала давайте успокоимся и не будем так переживать.
Во-вторых я вам уже сказал что нужно делать ВЫВОД текста в пхп скрипте, а не делать return! Вы что, вызываете из JS функцию php, из которой ожидаете получить данные, используя return???
Вы шлёте запрос скрипту, и ответ вы будете получать в виде текста, которым пхп скрипт ответит на ваш запрос! А для того что-бы он на него ответил - нужен не return а echo (или print).

Если-же у вас ВООБЩЕ ничего не работает - то покажите полностью весь код вашей страницы (со всем html и js).
9.1K
15 сентября 2010 года
motorw
134 / / 15.12.2009
Цитата: patison
Ну, для начала давайте успокоимся и не будем так переживать.
Во-вторых я вам уже сказал что нужно делать ВЫВОД текста в пхп скрипте, а не делать return! Вы что, вызываете из JS функцию php, из которой ожидаете получить данные, используя return???
Вы шлёте запрос скрипту, и ответ вы будете получать в виде текста, которым пхп скрипт ответит на ваш запрос! А для того что-бы он на него ответил - нужен не return а echo (или print).

Если-же у вас ВООБЩЕ ничего не работает - то покажите полностью весь код вашей страницы (со всем html и js).


Я же уже объяснял, что НИКАК не работает php-скрипт, независимо от того, что в нем. Я писал всегда print, т.к. он, по идее, должен работать. Но он не работает. Я, конечно, понимаю, что только функция может возвращать значение, но этот PHP мне снес мозг так, что я уже подумал, что и return можно где угодно ставить. Как я уже говорил - ЧТО только не пиши в php-скрипте - он не работает. Уже пишу это в четвертый раз. Когда Вы поймете? Не работает AJAX, а не PHP.
Весь код страницы я писать не буду, я приведу две формы - в который обычным способом ajax работает и эту, в которой нет.
1. Не работает:

Код:
<div id='mycaptcha'><form>
                    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 &#111;&#110;Click=$.ajax
                    (
                        {
                            type: "POST",
                            url: "checkandreg.php",
                            async: true,
                            data: "keystring="+document.getElementByName("keystring")
                        }
                    ).responseText></form>
                </div>

2. Работает:
 
Код:
<div id="adm">
                    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 &#111;&#110;Click="send()"><br><br>
                    <input type=button value=Register &#111;&#110;Click="register(0)" id='btnregn'>
                    </a>
</div>

3. Работающий JS-ajax:
Код:
function send()
                        {
                            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.&#111;&#110;readystatechange=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 в двух вариантах выше в постах.
8
15 сентября 2010 года
mfender
3.5K / / 15.06.2005
Цитата: motorw
Так и понять, что не работает. Если я работал с javascript'овым ajax'ом (обычным способом), то читай первый пост, где не работало. Если с этим, то этот вообще никак не запускает скрипт, ни при событии success ничего не работает.

P.S. Не работало - значит не выполнялся скрипт, и в функции, выполняющий post-запрос не выскакивали алерты. Да что тут непонятного? Вы же не задаете себе вопрос, почему ls > /dev/null не выводит на экран?


Товарищ, а не подскажешь, что за интересная порча getElementByName ? Новое слово в JavaScript?

9.1K
15 сентября 2010 года
motorw
134 / / 15.12.2009
Цитата: mfender
Товарищ, а не подскажешь, что за интересная порча getElementByName ? Новое слово в JavaScript?



Да, новое слово. Во-первых, оно у меня всегда работает(что, судя по тебе, странно), мало того, во всех браузерах ! Во-вторых, попробуй сам.

8
15 сентября 2010 года
mfender
3.5K / / 15.06.2005
Цитата: motorw
Да, новое слово. Во-первых, оно у меня всегда работает(что, судя по тебе, странно), мало того, во всех браузерах ! Во-вторых, попробуй сам.


Специально сходил на 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 врёт?

9.1K
15 сентября 2010 года
motorw
134 / / 15.12.2009
Цитата: mfender
Специально сходил на 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 врёт?


Хе :) Ты только сейчас заметил, что водит? Уже лет 5, по крайней мере, пользуюсь этим методом. Попробуй сам. Или погугли хотя б. Есть он. А майки - они такие.
Так вот - ребят, простите, может быть, за грубость, но вы не поняли меня. Не работает именно ajax, а не php. Поэтому про php больше не спрашивайте.

274
15 сентября 2010 года
Lone Wolf
1.3K / / 26.11.2006
моя лиса не знает метода getElementByName() так что-то походу не майкрософт врет...
а также возьми поставь на лису фаербаг и посомтри где ошибка. если в ЖС-е то ФаерБаг тебе ве выведет.
9.1K
15 сентября 2010 года
motorw
134 / / 15.12.2009
Странно. У меня везде работает. Даже в php отсылает.

А лиса отстой.
9.1K
15 сентября 2010 года
motorw
134 / / 15.12.2009
Фаерфокс, к сожалению, не работает нормально с jquery.tabs, соответственно, я не могу проверить фаербагом это в нем.
8
15 сентября 2010 года
mfender
3.5K / / 15.06.2005
Удивительное рядом! Пять лет пользуешься замечательным несуществующим методом, и он работает?

Чтобы совсем уж убедить тебя в том, что водишь за нос ты нас тут, сделай следующее:
 
Код:
<div id="probediv" name="probediv">Тут какой-то текст</div>
<button &#111;&#110;click="alert(document.getElementByName('probediv').innerHTML)">Нажимаем на кнопку и ищем probediv</button>

FireFox 3.6.9 сообщает: "Ошибка: document.getElementByName is not a function"
IE8 сообщает: "Объект не поддерживает это свойство или метод"

А где он у тебя и только у тебя работает?
9.1K
15 сентября 2010 года
motorw
134 / / 15.12.2009
Цитата: mfender
Удивительное рядом! Пять лет пользуешься замечательным несуществующим методом, и он работает?

Чтобы совсем уж убедить тебя в том, что водишь за нос ты нас тут, сделай следующее:
 
Код:
<div id="probediv" name="probediv">Тут какой-то текст</div>
<button &#111;&#110;click="alert(document.getElementByName('probediv').innerHTML)">Нажимаем на кнопку и ищем probediv</button>

FireFox 3.6.9 сообщает: "Ошибка: document.getElementByName is not a function"
IE8 сообщает: "Объект не поддерживает это свойство или метод"

А где он у тебя и только у тебя работает?



Бред. Попробовал - и правда не работает. Но post-запрос отправляется. PHP его принимает. Как такое может быть?

9.1K
15 сентября 2010 года
motorw
134 / / 15.12.2009
Нашел проблему кажется. Ошибка, похоже, была в том, что была лишняя "<". По крайней мере, без нее ajax уже работает.
8
15 сентября 2010 года
mfender
3.5K / / 15.06.2005
Цитата: motorw
Бред. Попробовал - и правда не работает. Но post-запрос отправляется. PHP его принимает. Как такое может быть?


Запрос-то отправляется, только посылаешь ты порожняк ему, а не содержимое keystring. Напиши data: "keystring="+document.getElementById("keystring").innerHTML, а то ты ему ещё ко всему прочему объект отправить пытаешься.

9.1K
15 сентября 2010 года
motorw
134 / / 15.12.2009
Да не, в том-то и дело, что отправляется именно данные с формы, то есть то, что надо.

А насчет объекта - это почему? Я ему value передаю.
8
15 сентября 2010 года
mfender
3.5K / / 15.06.2005
 
Код:
<input type=text name="keystring">
<input type=button value=Register &#111;&#110;Click=$.ajax                     (                         {                             type: "POST",
url: "checkandreg.php",
async: true,
data: "keystring="+document.getElementByName("keystring")                         }                     ).responseText></form>

Не заметил я там, что ты value передаёшь
9.1K
15 сентября 2010 года
motorw
134 / / 15.12.2009
Ага, не дописал здесь..
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог