Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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.077 c
2-1331397815
crank
2012-03-10 20:43
2013.03.22
Выбор БД


15-1353056660
stas
2012-11-16 13:04
2013.03.22
Chromium Embedded silent mode


15-1343841386
alexdn
2012-08-01 21:16
2013.03.22
Откуда картинка


15-1331238602
Юрий
2012-03-09 00:30
2013.03.22
С днем рождения ! 9 марта 2012 пятница


2-1334939002
leklerk
2012-04-20 20:23
2013.03.22
Как сделать, чтобы в dbgrid всегда была прокрутка?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский