У меня есть страница с вызовом ajax, основанная на выборе пользователем. В некоторых случаях, хотя он указан как POST, он изменяется на GET; в результате код на вызываемой странице выходит из строя.
EDIT: Хотя $ _SERVER ['REQUEST_METHOD'] говорит мне, что это GET, на странице ответов переменная $ _GET пуста, как и переменная $ _POST. (Я надеялся, что смогу обойти проблему, захватив параметры из $ _GET вместо этого.)
Вот соответствующая часть вызова ajax:
var filters = getFilters(); var fnargs = "GetArticles|" + filters ; $.ajax({ url: 'retrievedata.php', type: "POST", async:true, data: {"functionname":"getpapers", "arguments":fnargs}, dataType: "JSON",
За ним следуют разделы успеха и ошибок.
Функция getFilters создает строку с разделителями-запятыми, содержащую 3 коротких строки. Любой из них или все они могут быть пустыми. При заполнении каждый представляет собой список целых чисел, разделенный запятыми. Вот некоторые примеры:
'1','3,6','2015' '','','' '1','',''
В каждом случае вкладка «Сеть» веб-консоли Firefox показывает мне, что для вызова были собраны правильные параметры и, если на то пошло, это POST. Но я добавил проверку $ _SERVER ['REQUEST_METHOD'] в retrievedata.php (вызываемая страница), и я обнаружил, что некоторое время POST стал GET.
Это происходит последовательно в том смысле, что один и тот же результат getFilters всегда обрабатывается одинаково. Но помимо этого единственная согласованность, которую я могу найти, заключается в том, что если третья строка заполнена, она всегда работает. Вот некоторые случаи, когда он работает:
'','','1998' '','','1998,2008' '','1','' '','2,1','' '','2','' '1','','1999' '1','1','1999' '1','1','' '1,3','1','' '3','',''
Вот некоторые из них: GET:
'','','' '','3,1','' '','2,3','' '','3','' '1','','' '1,3','',''
Вероятно, следует отметить, что я поставил исходную проблему при вызове ajax: Иногда _POST пуст . Благодаря комментатору, я понял, что изменение GET стало ключевым вопросом.
Кроме того, стоит добавить, что у меня есть другая страница с практически идентичным вызовом, за исключением того, что ее версия getFilters объединяет только две строки, разделенные запятыми (и первым компонентом fnargs является «GetPapers», а не «GetArticles». Эта страница всегда делает правый вызов.