2011-11-22 17 views
117

olup olmadığını algılandı Benim eylemimde yalnızca bir AJAX isteğinden çağrıldığında işleme yanıt vermek istiyorum. Nasıl kontrol ederim?Raylar, isteğin AJAX

Böyle bir şey yapmak istiyorum: Eğer linkleri veya formlarda :remote => true kullanıyorsanız

def action 
    @model = Model.find(params[:id]) 

    respond_to do |format| 

     if (wasAJAXRequest()) #How do I do this? 

     format.html #action.html.erb 

     else 

     format.html {redirect_to root_url} 
    end 
end 

cevap

233

Bir AJAX isteği olup olmadığını görmek için header[X-Requested-With] denetleyebilirsiniz. İşte nasıl yapılacağı konusunda iyi bir article. = ~ Uyarınca,

if request.xhr? 
    # respond to Ajax request 
else 
    # respond to normal request 
end 
15

, yapacağın:

respond_to do |format| 
    format.js { #Do some stuff } 

Ayrıca respond_to önce kontrol edebilirsiniz request.xhr? numaralı telefonu arayarak bloke edin.

+24

bir ajax isteği mutlaka javascript ile cevap zorunda değildir , ' $ .ajax ({dataType: 'html'}) ', HTML ile yanıt veren ajax'dir. Bunu yapmanın en doğru yolu, 'request.xhr' den bahseden ikincidir? –

0

request.xhr? 

döner sayısal veya sıfır değerleri değil dokümanlar olarak BOOLE değerler söylemek unutmayın: Burada

bir örnektir.

irb(main):004:0> /hay/ =~ 'haystack' 
=> 0 
irb(main):006:0> /stack/ =~ 'haystack' 
=> 3 
irb(main):005:0> /asfd/ =~ 'haystack' 
=> nil 

dayanıyor:

# File actionpack/lib/action_dispatch/http/request.rb, line 220 
def xml_http_request? 
    @env['HTTP_X_REQUESTED_WITH'] =~ /XMLHttpRequest/ 
end 

yüzden

env['HTTP_X_REQUESTED_WITH'] =~ /XMLHttpRequest/ => 0 

docs:

http://apidock.com/rails/v4.2.1/ActionDispatch/Request/xml_http_request%3F

+0

arasındaki fark nedir? her ikisi de doğru/yanlış değil mi? –

+0

"Boolean" bir bağlamda kullanıldığında, onları boole değil, ama bool'a dönüştürülecek olanlara davranmanız gerektiği anlamına gelir. Yukarıdaki env ['HTTP_X_REQUESTED_WITH'] = ~/XMLHttpRequest/return 0 değil false. Ve 0 aslında gerçektir, Ruby'de falsey değil: 0 || 1 => 0 Ama yazımı açıklık için değiştireceğim. – pixelearth

+0

Ama onun doğruluk gerçeği, sıfır, metnin indeks 0'da bulunduğunu, yani bulunduğunu (ve onun ajax isteğini) ifade eder. Metin bulunamazsa, sonuç nil'dir, bu yanlıştır. –

İlgili konular