2014-10-27 100 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

相关问题