JQuery Ajax mengirim GET, bukan POST

87

Kode berikut memicu GET, bukan permintaan 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);

Mengapa, dan bagaimana saya bisa mendapatkan POST?


Saya melihat di Google Chrome Inspect dan Firefox Inspect bahwa browser mengirimkan GET. Ini dari Chrome:

URL Permintaan: http: // localhost / SAMPLE-CODES / UPDATE% 20MYSQL / api / add / Request Metode: GET Kode Status: 200 OK


TERPECAHKAN

URL bernama './api/add' sebenarnya memposting ke './api/add/index.php'. Ternyata panggilan './api/add /index.php' atau './api/add /' memberi saya permintaan POST.

Itu hanya URL yang salah, tetapi untuk beberapa alasan saya berhasil mendapatkan permintaan GET ke '.api / add /'.

Timothée HENRY
sumber
2
Menurut Anda mengapa ini akan menjadi permintaan GET?
Viktor S.
1
Sudahkah Anda mencoba menjalankan panggilan ajax di firefox dengan panel bersih dibuka di firebug?
Fabrizio Calderan
2
Uji - jika Anda akan menjalankan ini dan memeriksa panel jaringan, Anda akan menemukan bahwa ia mengirimkan permintaan posting
Viktor S.
1
@tucson - seperti yang sudah saya tulis - periksa file .htaccess Anda. Mungkin itu membuat pengalihan alih-alih menulis ulang. Pada dasarnya, saya melihat bahwa JS itu Ok (mengharapkan titik di url './api/add' yang membingungkan saya). Jadi sepertinya masalah di sisi server. Dan informasi dalam pertanyaan Anda tidak cukup untuk memberikan bantuan khusus
Viktor S.
1
Tambahkan solusinya sebagai jawabannya
Adam Lynch

Jawaban:

103

Beberapa masalah di MVC. Untuk beberapa alasan ketika saya menghapus [HttPost] itu berfungsi seperti yang diharapkan, meskipun saya memberi tahu ajax untuk menggunakan POST.

  • Ternyata Anda perlu menggunakan

ketik: "POSTING"

  • Padahal contoh di halaman jQuery mengatakan untuk digunakan

metode: "POSTING"

Sekarang POST

Tetapi setelah menggali dokumentasi saya menemukan ini.

masukkan deskripsi gambar di sini

Piotr Kula
sumber
6
ini adalah masalah yang HANYA saya alami. tidak menyadari bahwa nama opsi diubah pada 1.9. Pikir itu selalu "metode"
Bill Garrison
2
Saya melihat tidak ada masalah dengan memasukkan keduanya hanya untuk memastikan. { method : "POST", type: "POST" }
Scott
Ya, Anda dapat memasukkan apa pun yang Anda inginkan dalam konstruktor, tetapi menyertakan keduanya untuk kompatibilitas tidak terlalu masuk akal. Kebanyakan orang akan menggunakan 1.11 atau 2.1 sekarang dengan cara apapun. Ini hanya menyebabkan masalah setelah meningkatkan seperti dari 1.4.3 atau 1.6.2
Piotr Kula
3
Saya menghabiskan waktu lama untuk mencoba memperbaiki ini pada hari Jumat memperbarui frontend lama untuk menggunakan API baru. Terima kasih banyak!
NobleUplift
31

Saya mengalami masalah ini dan menurut saran @ FAngle, itu karena .htaccess saya menghapus garis miring yang tertinggal - dan saya telah menyetel url ke /ajax/foo/bar/dan tidak /ajax/foo/bar. Pengalihan mengubah permintaan dari POST menjadi GET. Hapus / dan masalah terpecahkan!

texelate
sumber
Ini memecahkan masalah persis yang disebutkan dalam pertanyaan asli untuk saya. Saya meng-hosting aplikasi laravel di Wamp 3.0.6
İlter Kağan Öcal
10

URL './api/add' sebenarnya dialihkan ke './api/add/index.php'. Oleh karena itu, efek samping yang aneh ini yang permintaan baru setelah pengalihan dikirim menggunakan, GETbukanPOST

Larutan

  • gunakan url lengkap './api/add/index.php'
  • atau tambahkan garis miring './api/add/'.
Jossef Harush
sumber
6

Saya memperhatikan perilaku ini juga di mana POST saya mengirimkan GET. Skenarionya cukup unik, tapi mungkin itu akan membantu seseorang.

Ini terjadi pada saya di halaman edit Peran Pengguna saya, di mana saya menggunakan ajax (posting) sebagai tindakan langsung ketika peran dicentang atau tidak dicentang.

Saya juga memiliki server yang dikonfigurasi untuk mengautentikasi ulang pengguna (dan mengarahkan mereka) setiap kali informasi peran mereka berubah sehingga klaim mereka akan diperbarui.

Siklus brutal berakhir sebagai:

  1. Pembaruan Peran Pertama - POST - 200 sukses

  2. Pembaruan Peran Berikutnya - POST - 302 Ditemukan -> Alihkan (Saya tidak memperhatikan ini sampai saya menggunakan Fiddler daripada monitor jaringan Chrome)

  3. Alihkan Panggilan dari (2) (URL Sama) - GET - 404 Tidak Ditemukan (karena saya hanya mengizinkan Posting)

  4. BUKA (1)

Saya akhirnya mengubah server untuk melewati pembaruan otentikasi / klaim ketika mendeteksi permintaan ajax (berdasarkan Jenis Terima).

emragins
sumber
Wow! Menghadapi sesuatu yang serupa. Rupanya, di tingkat pengontrol saya, ia mengharapkan parameter sesi yang belum saya sertakan dalam titik akhir pengontrol baru, dan ia melakukan 302 dan kemudian GET. Terima kasih sobat.
Nimila Hiranya
5

Saya menemukan bahwa ketika menggunakannya dataType: 'jsonp'mengubah permintaan menjadi GET. Saya mengubahnya menjadi dataType: 'json'berubah dari GETmenjadi POST.

tonejac
sumber
Apakah Anda alasan mengapa perilaku ini diamati?
Saurabh Sarathe
@SaurabhSarathe - JSONP bekerja dengan menghasilkan elemen skrip yang hanya dapat menghasilkan permintaan GET.
Quentin
3

Saya memiliki masalah serupa dan itu mulai bekerja untuk saya segera setelah saya menghapus hardcode https://dari url saya.

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"
});
Parham
sumber
Ini terdengar lebih seperti masalah antara HTTP dan HTTPS (yaitu www.someurl.com Anda tidak memiliki sertifikat yang valid)
Alexis Wilke
2

Bagi saya, potongan kode Anda terlihat oke, tetapi jika Anda ingin memastikan, Anda bisa menggunakan $ .post daripada $ .ajax

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

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

Mr_DeLeTeD
sumber
8
posthanyalah metode singkatan untuk $ .ajax ({type: 'POST'})
Viktor S.
Ya, tapi karena kode Anda terlihat bagus. ketika saya mengujinya, ada beberapa permintaan posting
Mr_DeLeTeD
1

Periksa file .htaccess Anda atau cari beberapa hal lain yang dapat mengarahkan permintaan Anda

Viktor S.
sumber
1

Saya memiliki masalah yang sama dan menemukan pertanyaan ini tetapi jawaban tidak menyelesaikan masalah saya. Saya akhirnya menyelesaikannya dengan menghapus contentTypebidang dalam permintaan ajax.

contentType: "application/json",
Farid Movsumov
sumber
1

Saya mengalami masalah ini, dan ternyata itu adalah modul Penulisan Ulang URL di IIS.

Saya menggunakan ASP.NET MVC dan WebAPI. Saya membuat aturan untuk memaksa URL huruf kecil sehingga jejaring sosial tidak melihat URL yang sama sebagai dua halaman berbeda.

Sebagai contoh:

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

vs.

" http://url.com/view/something/123guididsomething "

Namun, ini entah bagaimana mengacaukan permintaan ajax saya. Saya menonaktifkan aturan dan masalah telah teratasi.

Callan
sumber
0

kesalahan yang sangat umum adalah kami menggunakan jenis tombol sebagai submit dan tidak mengubah metode untuk formulir (yang didapat secara default)

pastikan Anda tidak menggunakan tombol jenis kirim dan jika Anda melakukannya Anda telah mengubah metode formulir untuk mengirim

Junaid Masood
sumber