Подтвердить что ты не робот

JQuery Ajax отправляет GET вместо POST

Следующий код запускает GET вместо HTTP-запроса POST.

function AddToDatabase() {
  this.url = './api/add';
}

AddToDatabase.prototype.postData = function(dataToPost) {
$.ajax({
    type: "POST",
    url: this.url,
    data: dataToPost,
    context: this,
    success: this.onSuccess
  });
};


var AddToDatabase = new AddToDatabase();
data = {data: 'coucou'};
AddToDatabase.postData(data);

Почему и как я могу получить POST?


Я вижу в Google Chrome Inspect и Firefox. Убедитесь, что браузер отправляет GET. Вот из Chrome:

URL-адрес запроса: http://localhost/SAMPLE-CODES/UPDATE %20MYSQL/api/add/ Метод запроса: Код состояния GET: 200 OK


решаемые

URL-адрес под названием "./api/add" состоял в том, чтобы отправить сообщение в. /api/add/index.php. Оказывается, что вызов './api/add /index.php' или './api/add /' дает мне запрос POST.

Это был просто неправильный URL-адрес, но по какой-то причине я получал успешный запрос GET для ".api/add/'.

4b9b3361

Ответ 1

Некоторая проблема с MVC. По какой-то причине, когда я удаляю [HttPost], он работает так, как ожидалось, хотя я говорю ajax использовать POST.

  • Оказывается, вам нужно использовать

type: "POST"

  • Несмотря на то, что в примере на странице jQuery используется

метод: "POST"

Теперь это POST

Но после копания в документации я нашел это.

enter image description here

Ответ 2

У меня была эта проблема, и по предложению @FAngle это было потому, что мой .htaccess удалял трейлинг-косые черты - и я установил URL-адрес /ajax/foo/bar/, а не /ajax/foo/bar. Переадресация изменяет запрос с POST на GET. Удалите проблему и решите проблему!

Ответ 3

URL './api/add' действительно перенаправлен на './api/add/index.php'. поэтому эта странная сторона влияет на новый запрос после перенаправления с помощью GET вместо POST

Решение

  • используйте полный URL './api/add/index.php'
  • или добавить косую черту './api/add/'.

Ответ 4

Я заметил это поведение, когда мой POST отправлял GET. Сценарий довольно уникален, но, возможно, это поможет кому-то.

Это происходило со мной на странице User Role-edit, где я использовал ajax (post) в качестве немедленного действия, когда роль была проверена или снята.

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

Брутальный цикл закончился следующим образом:

  • Первое обновление роли - успешное выполнение POST - 200

  • Следующее обновление роли - POST - 302 Найдено → Перенаправление (я не сделал заметьте это, пока я не использовал Fiddler, а не сеть Chrome монитор)

  • Перенаправить вызов из (2) (тот же URL) - GET - 404 не найдено (с Я только разрешил сообщение)

  • GOTO (1)

Я закончил тем, что менял сервер, чтобы обойти повторное аутентификацию/утверждение требований, когда он обнаружил запрос ajax (на основе типов Accept).

Ответ 5

Я обнаружил, что при использовании dataType: 'jsonp' он преобразует запрос в GET. Я изменил его на dataType: 'json', он изменился с GET на POST.

Ответ 6

Для меня ваша часть кода выглядит нормально, но если вы хотите быть уверенным, вы можете использовать $.post вместо $.ajax

$.post('ajax/test.html', function(data) {
 $('.result').html(data);
});

jquery link: http://api.jquery.com/jQuery.post/

Ответ 7

У меня была аналогичная проблема, и она начала работать для меня, как только я удалил hardcoded https:// из моего url.

jQuery.ajax({
 type: "POST",
 url: "www.someurl.com",//instead of "https://www.someurl.com"
 data: { foo:"bar"},
 success: function(d){ console.log(d); },
 dataType: "JSONP"
});

Ответ 8

У меня была та же проблема и нашла этот вопрос, но ответы не помогли решить мою проблему. В конце концов я разрешу его, удалив поле contentType в запросе ajax.

contentType: "application/json",

Ответ 9

Проверьте файл .htaccess или найдите еще одну вещь, которая может перенаправить ваш запрос.

Ответ 10

У меня была эта проблема, и она оказалась модулем перезаписи URL-адресов в IIS.

Я использую ASP.NET MVC и WebAPI. Я создал правило, чтобы заставить URL-адреса нижнего регистра, чтобы в социальных сетях не отображался тот же URL-адрес, что и две разные страницы.

Например:

" http://url.com/View/Something/123GuidIdSomething"

vs

" http://url.com/View/Something/123GuidIdSomething"

Это, однако, каким-то образом возилось с моими запросами ajax. Я отключил правило, и проблема была решена.

Ответ 11

Я потратил около дня на просмотр и поиск в сети без результатов, пока не понял, что не только $.Ajax отправляет GET вместо POST, но также не отправляет данные. Я попробовал решение из статьи ниже, и оно сработало, как и предполагалось. Теперь я должен выяснить, почему или быть образованным.

https://blog.arvixe.com/why-is-jquery-ajax-sending-a-get-instead-of-a-post/