Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизНепонятка на стыке 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;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.072 c