2012-04-15 140 views
2

發送Ajax請求時出現問題。當你點擊鏈接請求發送到服務器3次,答案沒有來。rails ajax請求

爲什麼請求被髮送三次以破壞?

我在哪裏出錯了查詢的形成?

代碼:

run.html.erb

... 
<%= link_to "Next", "#", :id => 'next', :class => 
... 

run.js.erb

(function(){ 

    $("#next").click(function(){ 

    $.ajax({ 
     type: 'POST', 
     url: '/engine/tff', 
     success: function(data){ 
     alert("ok"); 
     $("#question").html(data); 
     } 
    }); 


    return false; 
    }); 
}); 

控制器

def tff 
    respond_to do |format| 
     format.js render :text => "hello" 
    end 
end 
+0

你應該避免點擊動作 – apneadiving 2012-04-15 16:24:52

+0

回報虛假的默認應採取照顧...... – DGM 2012-04-15 16:28:55

回答

2

我猜測單擊事件綁定多次可能是腳本被多次調用。不知道多次調用的原因是什麼,因爲我不熟悉rails。

你可以做些什麼來避免它綁定它或使用on api之前解除綁定點擊事件。

function ajaxRequest(){ 
    $.ajax({ 
     type: 'POST', 
     url: '/engine/tff', 
     success: function(data){ 
     alert("ok"); 
     $("#question").html(data); 
     } 
    }); 
    return false; 
    } 

$("#next").unbind("click").bind("click",ajaxRequest);

$(document).on("click","#next",ajaxRequest);

還不能肯定,如果你試圖在文件準備結合並且在代碼中的錯字。但應裹這樣的:

$(function(){ 
    $("#next").click(ajaxRequest); 
}); 
1

有一件事我最近跑進了jQuery的嘗試運行結果,因爲默認的dataType將.js解釋爲腳本,而不是文本。您可能需要將dataType: "text"添加到ajax調用中。我不明白這如何轉化爲三個電話。

我認爲返回false應該是爲了防止點擊繼續前進,但是也許最好使用preventDefault()作爲apneadiving建議的形式。