2014-10-27 44 views
1

問題
很簡單:除了錨標記<a>的正常點擊功能我想,如果錨被點擊後觸發AJAX GET請求(在我的例子由classfire歸因)。Anchor Click和jQuery GET在FF和Safari中不起作用,但是在Chrome中工作,爲什麼?

重要:錨點(href)的目標以及Ajax調用的目標在目標url中具有相同的域。

例jQuery代碼:

$(document).ready(function() { 
    $('.fire').click(function() { 
    $.get("http://example.com/rest/fire/"); 
    }); 
}); 

示例HTML代碼:

<a href="http://example.com/index.html" class="fire">Click here</a> 

在瀏覽器(V38)的asyncronous 「發射後不管」 - GET請求被髮送,然後瀏覽器顯示的鏈接的頁。在Firefox(v32)和Safari(Yosemite)中,異步GET請求不會被觸發。爲什麼?

我甚至在JSFiddle測試它(我只看到了錨GET請求,而不是Ajax的GET請求/rest/fire

發現的解決方案(修訂版2014年10月28日)
它不會在Safari工作,火狐因爲$.get()默認使用異步模式(正如我最初所希望的那樣)。但是,如果目標網域與anchor標記的網址相同,則Firefox和Safari似乎忽略了$.get()。所以爲了使它工作,你必須讓阿賈克斯同步

更新jQuery代碼(現在也工作在Firefox和Chrome):

$(document).ready(function() { 
    $('.fire').click(function() { 
    $.ajax({  
     url: "http://example.com/rest/fire/" , 
     async: false 
    }); 
    }); 
}); 

回答

2

發現的解決方案(修訂版2014年10月28日)
因爲$.get()使用默認的每異步模式它不會在Safari和Firefox瀏覽器(如我最初希望它是)。但是,如果目標網域與anchor標記的網址相同,則Firefox和Safari似乎忽略了$.get()。所以爲了使它工作,你必須讓阿賈克斯同步

更新jQuery代碼(現在也工作在Firefox和Chrome):

$(document).ready(function() { 
    $('.fire').click(function() { 
    $.ajax({  
     url: "http://example.com/rest/fire/" , 
     async: false // needed for Safari and Firefox 
    }); 
    }); 
}); 

但我仍然相信,這是在Firefox和Safari中的錯誤,它應該與異步模式下正常工作。問題的根本原因很可能是基於瀏覽器中如何建立到單個域的連接(通過一個連接複用,多個非複用連接?)......也許有人知道?

-1

您需要防止鏈路的默認操作。 http://jsfiddle.net/d2o11rn9/

$(document).ready(function() { 
    $('.fire').click(function(e) { 
     $.get("/test"); 
     e.preventDefault(); 
    }); 
}); 
+0

謝謝@Clayton,我會測試它並給出一些反饋。可以肯定的是,我希望這兩個工作:發送阿賈克斯和打開新的鏈接... – basZero 2014-10-28 07:01:14

+0

嗨@Clayton,這是行不通的。它只會觸發AJAX請求。正常的錨點點擊不再有效。我需要一個執行兩個請求的解決方案。 – basZero 2014-10-28 07:21:14

相關問題