2011-01-30 61 views
1

所以,我有這個環節,應該發送一個AJAX請求每次被點擊:jQuery的阿賈克斯並不總是發送請求到服務器

<a href="/application/start_game?human_is_first=true" data-remote="true">Yes</a> 

但是,這並不總是有效的第一次嘗試。有時候,只有在點擊了其他AJAX鏈接後(也不會在他們應該發送請求時),它纔會起作用。

我知道鏈接正在發送請求,因爲當我單擊鏈接時,服務器控制檯輸出不會改變。沒有錯誤,沒有。

我使用rails.js和jQuery 1.4.4。

直播應用,以顯示你是怎麼回事:http://ttt-ai.heroku.com/

+0

這是什麼意思,「不適用於第一次嘗試」?它會讓你遠離頁面?然後你在瀏覽器中使用「返回」,然後它工作?最重要的是,您使用的是哪種瀏覽器?你如何建議我們去重現這一點? – mislav 2011-01-30 23:50:57

+0

@mislav:AFAIK,`rails.js`將點擊處理程序綁定到`[data-remote]`。 – 2011-01-31 00:10:26

回答

3

頁面上的JavaScript沒有任何問題;只有你可憐的CSS。

您會發現,在整個「是」和「否」按鈕中,實際的鏈接元素只佔用字母周圍的微小空間。鏈接絕對沒有填充,因此點擊按鈕時很容易錯過。

因爲您在LI元素本身創建了「:hover」樣式,您給我們的印象是整個元素會對點擊做出反應。它不是。只有A元素對點擊作出反應,並由rails.js處理。

0

我建議你使用與firequery(火狐插件)螢火蟲。 然後,您可以看到從瀏覽器傳出的綁定jQuery事件和ajax請求。 通常這有助於理解爲什麼不起作用。 檢查螢火蟲控制檯您的ajax請求是否正確發送,如果沒有,檢查鏈接上的點擊事件是否綁定。

+0

當我點擊按鈕時,螢幕控制檯顯示沒有js活動。 (至少不會過一會兒。) – NullVoxPopuli 2011-01-30 20:52:53

+0

如果你想查看它,我添加了一個鏈接。 – NullVoxPopuli 2011-01-30 23:44:03

1

一個常見問題是,JavaScript沒有及時加載,或者在錯誤的時間加載(即dom準備好之前)。 JS錯誤日誌中是否有錯誤?

+0

在webkit檢查器中沒有javascript錯誤 – NullVoxPopuli 2011-01-30 20:23:21

0

隨着@ ispum的建議,檢查的螢火/其他調試器綁定的事件也進行檢查,以確保ajax:before回調不會取消您的活動:

$("#your_link_id") 
    .bind('ajax:before', function() { 
     //if this returns false, remote event is cancelled 
    }); 

沒有返回false,這將取消遠程動作