Поэтому у меня есть эта проблема какое-то время, и я знаю, что на эту тему есть бесчисленные вопросы, поверьте, я пробовал все возможные решения, но все равно не работает.
Это самый простой пример, который в моем случае не работает
JQuery:
$.ajax({ url: "ajax/add-user.php", type: "POST", data: {name: 'John'}, success: function(data){ console.log(data); } });
PHP
echo json_encode($_POST);
Вот и все. Я всегда возвращаю пустой массив в качестве ответа. Я попытался с serialize()
для data:
но ответ всегда пуст. Я не получаю никаких ошибок, просто пустой массив, когда я должен получить опубликованные значения.
Если, например, в php я пытаюсь echo
некоторые жестко закодированные переменные, я их получаю, но $_POST
и $_GET
не работают.
Любое решение или методы, как я могу определить проблему?
Спасибо.
EDIT / РЕШЕНИЕ
Итак, похоже, проблема связана с .htaccess, который переписывает URL-адрес и удаляет расширение. На вкладке сети действительно запрос был перемещен навсегда. Удаление расширения .php из URL-адреса ajax: решил его. Спасибо и жаль, что тратили время. ура
вам нужно установить тип данных как json в ajax-вызове
КОД JQUERY:
$.ajax({ url: "ajax/add-user.php", type: "POST", dataType:'json', data: {name: 'John'}, success: function(data){ console.log(data); } });
в то же время проверьте на своем скрипте, обновляется ли заголовок, чтобы принимать данные json
.
PHP-код:
/** * Send as JSON */ header("Content-Type: application/json", true);
Счастливое кодирование:
Недавно я столкнулся с этой проблемой, но по другим причинам:
Моя причина – у меня был URL-адрес на сервере, зарегистрированный как:
http://mywebsite.com/folder/path/to/service/
Но мой клиент звонил:
http://mywebsite.com/folder/path/to/service
.htaccess на сервере читает это как перенаправление 301 GET на правильный URL-адрес и удаляет данные POST. Простым решением было дважды проверить URL-адрес .
@ C.Ovidiu, @MarcB – Вы оба, ребята, спасли мне много часов в отладке!
У меня была такая же проблема, и проблема оказалась одной из моих переменных в объекте data
была определена. По какой-то причине это предотвратило отправку почтовых данных. Установка переменной для чего-то другого, кроме неопределенного, устраняет проблему.
Почему бы не использовать jQuery.post ?
$.post("ajax/add-user.php", {name: 'John'}, function(response){ console.log(response); } );
Затем на вашем PHP вы можете сохранить вход так:
if(isset($_POST["name"])) { $name= $_POST["name"]; file_put_contents("name.txt", $name) header('HTTP/1.1 200 OK'); } else { header('HTTP/1.1 500 Internal Server Error'); } exit;
Попробуйте изменить код и использовать:
$.ajax({url: 'ajax/add-user.php', type: 'POST', data: {name: 'John'}, dataType: 'html', success: function(data){ alert("success"); console.log(data); },error: function (xhr, ajaxOptions, thrownError) {alert("ERROR:" + xhr.responseText+" - "+thrownError);} });
(так что вы получите предупреждение об ошибке и успешности, убедитесь, что html, что вы получаете. Дополнительные параметры помогут вам точно настроить ваши аякс-вызовы. Позже сыграйте с async true / false)
также запустите свою программу ajax / add-user.php в новом окне (введите url) и посмотрите, что она вызывает. Извлеките программу и заставите вас что-то повторить «то есть легендарный мир привет» и посмотреть, получит ли ваш ajax сообщение ,
Удачи.