2011-01-30 54 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,这将取消远程动作