JQuery Ajax, POST yerine GET gönderiyor


87

Aşağıdaki kod, POST HTTP isteği yerine bir GET'i tetikler.

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);

Neden ve nasıl bir POST alabilirim?


Google Chrome Inspect ve Firefox Inspect'te tarayıcının bir GET gönderdiğini görüyorum. İşte Chrome'dan:

İstek URL'si: http: // localhost / NUMUNE-KODLARI / UPDATE% 20MYSQL / api / ekle / İstek Yöntemi: Durum Kodunu GET: 200 Tamam


ÇÖZÜLDÜ

'./Api/add' adlı URL, aslında './api/add/index.php' adresine gönderilecek. './Api/add /index.php' veya './api/add /' çağrısının bana bir POST isteği verdiği ortaya çıktı.

Bu sadece yanlış bir URL idi, ancak bazı nedenlerden dolayı '.api / add /' için başarılı bir GET isteği alıyordum.


2
Neden bir GET talebi olacağını düşünüyorsunuz?
Viktor S.

1
Firebug üzerinde net paneli açılmış olarak firefox'ta ajax çağrısını çalıştırmayı denediniz mi?
Fabrizio Calderan

2
Test - bunu çalıştırır ve ağ panelini kontrol ederseniz, bir gönderi isteği gönderdiğini göreceksiniz
Viktor S.

1
@tucson - daha önce yazdığım gibi - .htaccess dosyanızı kontrol edin. Muhtemelen yeniden yazmak yerine yönlendirme yapar. Temel olarak, JS'nin Tamam olduğunu görüyorum (url'deki './api/add' noktasının kafamı karıştırmasını bekleyin). Yani daha çok sunucu tarafı sorunu gibi görünüyor. Sorunuzdaki bilgiler de belirli bir yardım için yeterli değil
Viktor S.

1
Lütfen çözümü cevap olarak ekleyin
Adam Lynch

Yanıtlar:


103

MVC'de bir sorun var. Bazı nedenlerden dolayı [HttPost] 'u kaldırdığımda, ajax'a POST'u kullanmasını söylememe rağmen beklendiği gibi çalışıyor.

  • Kullanmanız gereken ortaya çıktı

type: "POST"

  • JQuery sayfasındaki örnek şunu söylemesine rağmen

yöntem: "POST"

Şimdi POST'lar

Ancak dokümantasyonu kazdıktan sonra bunu buldum.

görüntü açıklamasını buraya girin


6
bu SADECE yaşadığım sorun. seçenek adının 1.9'da değiştiğini fark etmedi. Her zaman "yöntem" olduğunu
Bill Garrison

2
Emin olmak için ikisini de dahil etmekte bir sorun görmüyorum. { method : "POST", type: "POST" }
Scott

Evet, kurucuya istediğinizi ekleyebilirsiniz, ancak bunların her ikisini de uyumluluk için dahil etmek gerçekten mantıklı değil. Çoğu insan şimdiye kadar 1.11 veya 2.1 kullanıyor olacak. Bu sadece 1.4.3 veya 1.6.2'den yükseltme yaptıktan sonra bir soruna neden oluyor
Piotr Kula

3
Cuma günü bunu düzeltmeye çalışırken, yepyeni bir API kullanmak için eski bir ön ucu güncelleyerek çok uzun zaman harcadım. Çok teşekkür ederim!
NobleUplift

31

Ben bu sorunu vardı ve benim .htaccess eğik çizgileri kaldırarak çünkü Fangle önerisi @ başına o - ve ben url batmıştı /ajax/foo/bar/değil /ajax/foo/bar. Yönlendirme, isteği POST'tan GET'e değiştirir. / Ve sorun çözüldü!


Bu benim için orijinal soruda bahsedilen sorunu tam olarak çözdü. Wamp 3.0.6'da bir laravel uygulaması barındırıyorum
İlter Kağan Öcal

10

URL './api/add'aslında adresine yeniden yönlendirildi './api/add/index.php'. bu nedenle, yönlendirmeden sonraki yeni isteğin GETyerine kullanarak gönderdiği bu tuhaf yan etkiPOST

Çözüm

  • tam url'yi kullan './api/add/index.php'
  • veya eğik çizgi ekleyin './api/add/'.

6

Bu davranışı POST'umun bir GET gönderdiği yerde de fark ettim. Senaryo oldukça benzersiz, ama belki birine yardımcı olabilir.

Bu, Kullanıcı Rolü düzenleme sayfamda başıma geliyordu, burada bir rol işaretlendiğinde veya işareti kaldırıldığında hemen bir eylem olarak ajax (post) kullanıyordum.

Ayrıca sunucuyu, rol bilgileri her değiştiğinde, taleplerinin yenilenmesi için kullanıcının kimliğini yeniden doğrulayacak (ve onları yeniden yönlendirecek) şekilde yapılandırdım.

Acımasız döngü şu şekilde sona erdi:

  1. İlk Rol Güncellemesi - POST - 200 başarı

  2. Sonraki Rol Güncellemesi - POST - 302 Bulundu -> Yönlendirme (Chrome'un ağ monitörü yerine Fiddler'ı kullanana kadar bunu fark etmedim)

  3. Çağrıyı Yönlendir (2) (Aynı URL) - GET - 404 Bulunamadı (sadece Gönderiye izin verdiğim için)

  4. GİT (1)

Bir ajax isteği algıladığında (Kabul Türlerine göre) sunucuyu yeniden kimlik doğrulama / talep güncellemesini atlayacak şekilde değiştirdim.


Woah! Benzer bir şeyle karşılaştı. Görünüşe göre, benim denetleyici düzeyimde, yeni denetleyici uç noktasına dahil etmediğim bir oturum parametresi bekliyordu ve bir 302 ve ardından bir GET yapıyordu. Teşekkürler dostum.
Nimila Hiranya

5

Kullanırken dataType: 'jsonp'isteği bir GET. Ben değiştirdim dataType: 'json'o değişti GETiçin POST.


Bu davranışın gözlemlenmesinin nedeni siz misiniz?
Saurabh Sarathe

@SaurabhSarathe - JSONP, yalnızca GET istekleri oluşturabilen komut dosyası öğeleri oluşturarak çalışır.
Quentin

3

Benzer bir sorun yaşadım ve kodlanmış olanı url’imden kaldırır kaldırmaz https://benim için çalışmaya başladı .

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"
});

Bu daha çok HTTP ve HTTPS arasında bir soruna benziyor (yani www.someurl.com adresinizin geçerli bir sertifikası yok)
Alexis Wilke

2

Benim için kod parçanız iyi görünüyor, ancak emin olmak istiyorsanız $ .ajax yerine $ .post kullanabilirsiniz.

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

jquery bağlantısı: http://api.jquery.com/jQuery.post/


8
post$ .ajax ({type: 'POST'}) için kısa bir yöntemdir
Viktor S.

Evet, ancak kodunuz güzel görünüyor. test
ettiğimde

1

.Htaccess dosyanıza bakın veya isteğinizi yeniden yönlendirebilecek başka bir şey arayın


1

Aynı sorunu yaşadım ve bu soruyu buldum ancak cevaplar sorunumu çözmedi. Sonunda contentTypeajax isteğindeki alanı kaldırarak çözüyorum.

contentType: "application/json",

1

Bu sorunu yaşadım ve IIS'de bir URL Yeniden Yazma modülü olduğu ortaya çıktı.

ASP.NET MVC ve WebAPI kullanıyorum. Sosyal ağların aynı URL'yi iki farklı sayfa olarak görmemesi için küçük harfli URL'leri zorlamak için kural oluşturdum.

Örneğin:

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

vs

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

Ancak bu, bir şekilde ajax isteklerimle uğraşıyordu. Kuralı devre dışı bıraktım ve sorun çözüldü.


0

çok yaygın bir hata, gönder olarak düğme türünü kullanmamız ve form için yöntemi değiştirmememizdir (varsayılan olarak elde edilir)

düğme türü gönder kullanmadığınızdan emin olun ve eğer öyleyse, göndermek için form yöntemini değiştirdiyseniz

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.