2013-04-24 23 views
8

Herhangi bir bağlantı için Ajax isteği yapan bir işlev var. İstek yöntemi GET veya POST olabilir. Bu durumda, bir form kullanmadan bir POST yapmak istiyorum ancak Ajax isteği, isteği göndermeden önce bir hata atar. Hata "error" değerine sahiptir ve tüm hata/hata açıklama değişkenleri "" dir.JQuery Ajax POST, istekte bulunmadan boş bir hata atıyor

function loadPage(url,elem_id,method,data) { 
    ajaxLoading(elem_id); 
    $.ajax({ 
     type: method, 
     url: url, 
     data: data, 
     success:function(data){ 
      $("#"+elem_id).html(data);; 
     }, 
     error:function(request,textStatus,error){ 
      alert(error); 
     } 
    }); 
} 

fonksiyon denir parametreler (js konsolundan kopyalanan) bunlar:

sorulan gibi
data: "partial=yes" 
elem_id: "page" 
method: "post" 
url: "/projects/2/follow" 

, burada loadPage işlevini çağırır koddur.

$("body").on("click","a.ajax",function(event) { 
    var _elem = getDataElem($(this)); 
    var _method = getRequestMethod($(this)); 
    var _partial = getRequestPartial($(this)); 
    handlers.do_request(event,$(this).attr("href"),_elem, _method, _partial); 
}); 

var handlers = (function() { 
    var obj = {}; 
    obj.do_request = function(event,url,elem_id,method,data) { 
     event.preventDefault(); 

     loadPage(url,elem_id,method,data); 
     history.pushState({selector:elem_id,method:method,data:data},null,url); 
    }; 
}()); 

Ajax isteğinin başarısız olmasından sonra, istek varsayılan olarak yapılır ve başarılara yanıt verir. Tüm okudum, bu bir POST isteği (bir formu gerekmez) yapmak için geçerli bir yol gibi görünüyor.

İşlevde yanlış bir şeyler yapıyorum? Hata bilgileri neden boş?

Teşekkür

DÜZENLEME:

Ben değişkeni "veri" serialize fonksiyonu ile yapılır eserlerini işlev bir "form", bir POST için, düşünüyordum (örneğin "var data = $ (this) .serialize(); "). Bir "form" olmadan bir POST yaptığımda "veri" biçiminin bir şekilde yanlış olması olabilir mi? Belki JQuery Ajax işlevi, bir POST yapıldığında veri olarak "kısmi = evet" gibi basit bir dizeyi kabul etmez. Bu konuda bir fikrin var mı?

+0

isteğiniz ve textstatus değişkenlerinin boş olduğunu söylüyorsunuz –

+0

"Post" özelliği büyük harf olmalı mı? Dokümanlar içinde. –

+0

'loadPage''ü nasıl çağırdığınızı gösteren kodu gönderebilir misiniz? – 1337holiday

cevap

0

Sorun çözülemedi, bunun nedenini bulamadı. Yine de, 'POST' yöntemiyle bir çapa yerine gizli bir boş form kullanarak bir yol buldum. Bir form için, işlev güzel çalıştı. cevaplar

-1

Yalnızca bir tahmin, ancak docs'da, type parametresi tüm kapaklarda, yani 'POST' ve 'post' değil.

+0

ikisi de işe yaramaz mı? – 1337holiday

+0

'POST' ve 'post' ile denediğimi düşünmüyorum ve hiçbir fark yoktur. – JPHorta

+1

JavaScript büyük/küçük harfe duyarlıdır, bu nedenle her ikisi de mutlaka çalışmamalıdır. JQuery kaynağını (https://github.com/jquery/jquery/blob/master/src/ajax.js#L455) kontrol ettim ve tip parametresini büyük harfe dönüştürdüğüne benziyor. madde. –

0

deneyin: Bir anahtar kelimenin adını bir değişken kullanarak bir sorun yaşamanız halinde

function loadPage(url,elem_id,method,dat) { 
    ajaxLoading(elem_id); 
    $.ajax({ 
     type: method, 
     url: url, 
     data: dat, 
     success:function(data){ 
      $("#"+elem_id).html(data);; 
     }, 
     error:function(request,textStatus,error){ 
      alert(error); 
     } 
    }); 
} 

merak ediyorum. Bu işe yaramazsa, argüman olmadan loadPage'i çağırmayı ve tüm ajax parametrelerinizi kodlamayı deneyin, sadece çalışıp çalışmadığını görmek için.

+0

Şimdi bunu denedi, başarı yok. Yine de isteği göndermeden bir hata atıyor. Cevabınız için teşekkürler. – JPHorta

2

için

sayesinde sadece bu sorunu yaşamış ve düşünce bir iki saat sonra false önbelleği ayarlamaya çalışma. Bu benim için sorunumu çözdü. Yine önbellek kaldırıldı zaman

$.ajax({ 
    url: url, 
    cache: false, 
    type: method 
}); 

yazık ki, benim isteği bir sorun yoktu sanki çalışma oldu. cache:false ayarı 'click' ayarlanmış gibi görünüyor.

Çok iyi.

+0

Sunucu yanıtı, almayı denediğiniz veriyi (Soruyu bir "POST" ile ilgili olsa da, bir "GET" varsayarak) dinamikse, ön belleğe almanıza izin vermemelisiniz. Sonra 'cache: false 'gerekli olmamalıdır. –