Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Непонятка на стыке ajax и PHP   Найти похожие ветки 

 
Сергей М. ©   (2012-11-20 16:24) [0]

Как ни тоскливо, но волею "заказчика" приходится ковыряться в php-хозяйстве)

Пусть ajax-запрос отправляется (из JS-скрипта в IE или FF - неважно) так

XmlHttpRequestObject.open("POST", ...);

Апач получив запрос стартует PHP-cкрипт, в котором в числе прочего

$HttpRequestMethod = $_SERVER["REQUEST_METHOD"];
if (($HttpRequestMethod=="GET")
 $HttpRequestParameters = $_GET;
else if ($HttpRequestMethod=="POST")
 $HttpRequestParameters = $_POST;


Полагаю логичным было бы расчитывать на то что в рез-те выполнения этого фрагмента в переменной $HttpRequestParameters окажутся заведомо существующие ожидаемые параметры запроса из массива $_POST, однако в реальности $HttpRequestParameters оказывается пустой.
На самом деле ожидаемые параметры лежат в $_GET.

Вразумите - на какие грабли я наступил ?


 
БарЛог ©   (2012-11-20 16:34) [1]

Да вроде правильно все.
Мошт из-за ; ?

>  $HttpRequestParameters = $_GET;

*я не мастер этого дела*


 
Сергей М. ©   (2012-11-20 16:39) [2]

нарушений синтаксиса нет

p.s. лишняя откр.скобка в посте [0] - это моя очепятка, ее в действительности нет


 
знайка   (2012-11-20 16:42) [3]

POST не отменяет того что данные можно гнать в урле.
А как у вас они идут не видно.


 
Ega23 ©   (2012-11-20 16:57) [4]


> POST не отменяет того что данные можно гнать в урле.

+1, только хотел написать


 
Сергей М. ©   (2012-11-20 17:05) [5]

"в урле" они и "идут"

к примеру, так:

XmlHttpRequestObject.open("POST", "/somepage/somedir");

При

RewriteRule ^([a-z]+)/([0-9]+)$ ?page=$1&dir=$2

на стороне срипта в $_POST я ожидаю увидеть ассоц.массив

"page"=>"somepage"
"dir"=>"somedir"

а его там нет, зато он именно обнаруживается в $_GET


 
знайка   (2012-11-20 17:08) [6]

послали в гет и получили в гет, все правильно.


 
Сергей М. ©   (2012-11-20 17:11) [7]


> послали в гет


Это почему же "в гет" ?

Вот же:


> XmlHttpRequestObject.open("POST"


И при этом на стороне сервера при

echo $_SERVER["REQUEST_METHOD"];

вижу "POST" ...


 
Компромисс ©   (2012-11-20 17:11) [8]

http://stackoverflow.com/questions/2243656/post-or-get-in-xmlhttprequest


 
знайка   (2012-11-20 17:13) [9]

яж написал, пост не отменяет урл, урл это гет-данные, пост-данные - боди реквеста. Вы послали урлом значит идут в гет.


 
Сергей М. ©   (2012-11-20 17:21) [10]

Ага, теперь кажись сообразил.
Т.е. проще ,eltn не заморачиваться и взять параметры запроса из $_REQUEST ?


 
Eraser ©   (2012-11-20 17:39) [11]


> Сергей М. ©   (20.11.12 17:21) [10]


> взять параметры запроса из $_REQUEST ?

совершенно верно.


 
Сергей М. ©   (2012-11-20 17:43) [12]

Тогда не понятно какой вообще резон в

XmlHttpRequestObject.open("POST", ..

это не мое решение - я цитирую фрагмент из dbtreeview-либы ..


 
Eraser ©   (2012-11-20 17:43) [13]


> Сергей М. ©   (20.11.12 17:05) [5]
> "в урле" они и "идут"
>
> к примеру, так:
>
> XmlHttpRequestObject.open("POST", "/somepage/somedir");

тут сразу могу вот что сказать, не используйте эти объекты (XmlHttpRequestObject) напрямую. Лучше всего задействовать какой-либо фреймворк, т.к. там ОЧЕНЬ много нюансов. Используйте jQuery и будет счастье.  Тем боле что в новых версиях php есть уже встроенные функции для json.


 
Сергей М. ©   (2012-11-20 17:46) [14]

А, ну вроде понятно : был бы open("GET"), тогда тело xml-параметров запроса было бы проигнорировано


 
Сергей М. ©   (2012-11-20 17:53) [15]


> Eraser ©   (20.11.12 17:43) [13]


Да я бы с радостью вообще этой хренью не занимался, но приходится ковыряться в чужих исходниках, в которых не пахнет не что jQuery - ajax"ом вообще.
Задача - насколько возможно быстро разобраться в этом школярском шаблонном говнокоде и присобачить в самых "тормозных" его местах хоть какую-то асинхронность.


 
знайка   (2012-11-20 17:54) [16]


> Тогда не понятно какой вообще резон в
> XmlHttpRequestObject.open("POST", ..
> это не мое решение - я цитирую фрагмент из dbtreeview-либы
> ..
Надо у либы и спросить. :)


 
Сергей М. ©   (2012-11-20 18:03) [17]


> Надо у либы и спросить


Да ну ее к лешему)
Овчинка выделки не стОит.
Забрал параметры из $_REQUEST - и аминь.


 
Дмитрий С ©   (2012-11-20 18:13) [18]


> Забрал параметры из $_REQUEST - и аминь.

Ну вообще код нелогичен. Неужели PHP скрипт не знает как ему пришлют запрос: постом или гэтом.
А также не стоит забывать что при POST запросе могут передаваться как POST так и GET параметры.

XmlHttpRequestObject.open("POST", ...);
Посмотреть бы еще что дальше с XmlHttpRequestObject делается. И как URL формируется.


 
Дмитрий С ©   (2012-11-20 18:18) [19]

А еще к слову. В XmlHttpRequest часто указывают метод POST вместо GET для обхода кеша (чтобы с заголовками не париться).


 
Медвежонок Пятачок ©   (2012-11-20 19:19) [20]

есть предложение прикрутить к странице простейший prototype.js, и пользоваться его аякс реквестом.
чтобы быть спокойным за то, что тело запроса точно в порядке


 
Медвежонок Пятачок ©   (2012-11-20 19:24) [21]

ну и добавить фиолетовость на сервере

if (isset($_POST["myparam"])){
взять из поста;
}
else{
взять из гета;
}


 
antonn ©   (2012-11-20 19:48) [22]


>
> Вразумите - на какие грабли я наступил ?
>

нужно прочитать справку и нанять программиста.


> Забрал параметры из $_REQUEST - и аминь.

не надо так делать, одни и те же поля могут присутствовать и в GET и в POST, а актуальные, как правило, находятся именно в POST. Использование $_REQUEST - это как через мемо загружать тестовый файл для сортировки и сохранения.
Использование такого костыля может в будущем немало нервов испортить.


 
знайка   (2012-11-20 19:58) [23]


> а актуальные, как правило, находятся именно в POST
это по какому такому правилу? :)


 
Eraser ©   (2012-11-20 20:09) [24]


> antonn ©   (20.11.12 19:48) [22]


> Использование $_REQUEST - это как через мемо загружать тестовый
> файл для сортировки и сохранения.

это ты сам придумал? )


 
Омлет ©   (2012-11-20 22:04) [25]

> page=$1&dir=$2

Параметры из URL"a всегда попадают в _GET. С чего они должны быть в _POST?

An associative array of variables passed to the current script via the URL parameters.
http://www.php.net/manual/en/reserved.variables.get.php


 
antonn ©   (2012-11-20 22:28) [26]


> знайка   (20.11.12 19:58) [23]
>
>
> > а актуальные, как правило, находятся именно в POST
> это по какому такому правилу? :)

у тебя форма по урлу, в урле и форме есть параметр "name", при нажатии кнопки и отправки формы на сервер ты в "реквесте" что получишь? А что бы ты хотел получить?


 
Styx   (2012-11-20 22:36) [27]


> одни и те же поля могут присутствовать и в GET и в POST,
>  а актуальные, как правило, находятся именно в POST

http://stackoverflow.com/questions/1312871/what-does-egpcs-mean-in-php


 
antonn ©   (2012-11-21 18:06) [28]


> Styx   (20.11.12 22:36) [27]

для пользователя, а не самого пхп


 
Styx   (2012-11-21 18:20) [29]


> antonn ©   (21.11.12 18:06) [28]
> для пользователя, а не самого пхп

Актуальны они с точки зрения не пользователя, а программиста, и он имеет возможность объяснить ПХП, где они актуальней, установкой соответствующей директивы. При  её правильной установке в _REQUEST будет то, что надо.


 
antonn ©   (2012-11-21 18:25) [30]


> Актуальны они с точки зрения не пользователя, а программиста,
>  и он имеет возможность объяснить ПХП, где они актуальней,
>  установкой соответствующей директивы.

Данные нужно брать там, откуда они должны вернуться. Из урла, значит берем из GET. Из формы - берем из POST. Все эти костыли вокруг реквеста - лень и нежелание программиста поработать мозгом и руками, либо уровень проекта "хелло мир".
У меня в скрипте поле $_GET["id"] может означать номер каталога, а $_POST["id"] номер статьи. Разрулится через реквест? :)


 
Styx   (2012-11-21 18:48) [31]

Дык, что спорить - всё от задачи зависит. У меня имя пользователя тоже может прийти и в POST, и в GET, и в COOKIE, при этом для одних скриптов _нужно_ знать, откуда оно пришло, а другие должны взять первое подходящее. Для вторых REQUEST очинно пользителен...


 
Eraser ©   (2012-11-21 18:58) [32]


> antonn ©   (21.11.12 18:25) [30]


> Все эти костыли вокруг реквеста - лень и нежелание программиста
> поработать мозгом и руками, либо уровень проекта "хелло
> мир".

это твои личные выводы, не имеющие отношения к реальности.

> У меня в скрипте поле $_GET["id"] может означать номер каталога,
>  а $_POST["id"] номер статьи. Разрулится через реквест?
> :)

это ошибка в архитектуре.

многие крупные проекты построены таким образом, что один и тот же запрос может вызываться и так и эдак, особенно там где используется ajax. Привязывать код к какому-то одному способу, а потом переписывать все это не вариант.


 
antonn ©   (2012-11-21 19:09) [33]


>
> многие крупные проекты построены таким образом

какие, например?


 
antonn ©   (2012-11-21 19:20) [34]

Если  мне нужно обрабатывать данные и из GET и из POST, то я в скрипте выбираю из них данные, вот тебе "и так и эдак". Скрипт, который принимает данные только из GET или POST (а значит предназначен для работы с конкретным источником) не отработает, и не будет при сопровождении и отладке сношать мозг "непонятными данными"


 
©   (2012-11-22 00:02) [35]


> У меня в скрипте поле $_GET["id"] может означать номер каталога,
>  а $_POST["id"] номер статьи. Разрулится через реквест?
> :)

ОМГ О_О
и этот человек пишет про "хелло ворлд"?
гнать ссаными тряпками!
разными именами параметры никак не судьба назвать, да...


 
Андреевич   (2012-11-22 08:31) [36]


> разными именами параметры никак не судьба назвать, да...

значит "не судьба", особенно в "больших системах" где фраемворк позволяет создавать страницы, а на них формы редактирования, и все это без вмешательства программиста.
шорочки сними =)



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.08 c
15-1343421003
Юрий
2012-07-28 00:30
2013.03.22
С днем рождения ! 28 июля 2012 суббота


2-1337875870
Den
2012-05-24 20:11
2013.03.22
SetCursorPos не перерисовывает курсор?


15-1339121462
Unk
2012-06-08 06:11
2013.03.22
Подскажите проигрыватель видео.


15-1328942551
AV
2012-02-11 10:42
2013.03.22
Нужен ли XP mode, если на семерку хочу виртуалку поставить?


11-1242650049
QAZ
2009-05-18 16:34
2013.03.22
TreeView + Checkbox