2012-11-22 95 views
0

我有一个表和字段与“点击”选项:与变量的Ajax功能

<td class="name" onclick="ajax_update_entries('<?php echo $field['Player']['name']; ?>')"> 

它调用函数:

function ajax_update_entries(player_name) 
    { 
    $.post('http://mysite.com/entries/get_entries/' + player_name, function(data) 
    { 
    $('#gameText').html(data); 
    }); 
    setTimeout('ajax_update_entries(player_name)', 30000); 
    } 

他们做的非常好之后要请求的页面点击表格字段。它做的非常错误,它不能识别setTimeout中的“player_name”参数,它应该刷新它。在歌剧控制台返回:

Uncaught exception: ReferenceError: Undefined variable: player_name

和IE说,有没有“PLAYER_NAME”的定义。

但在另一方面,如果我去:

setTimeout('ajax_update_entries("Michael Jordan")', 30000); 

它的工作原理,并刷新带参数的页面:迈克尔·乔丹。

所以我的问题是:这个脚本有什么问题?我的意思是,为什么突然忘记变量player_name?如何解决它?

+0

@ bfavaretto的答案应该为您解决它 - 在您的原始代码中,您有引号内的player_name,它使其成为字符串,而不是变量:) – BenOfTheNorth

回答

4

你需要这个来代替:

setTimeout(function() { 
    ajax_update_entries(player_name); 
}, 30000); 

变量没有被遗忘,但问题是,你是通过函数调用作为一个字符串setTimeout。然后会发生什么,它是通过eval(顺便提一句是not good),没有它的原始上下文,所以JavaScript解释器不知道该传递什么。因此错误。

+0

或者,您可以将arg绑定为:'setTimeout(ajax_update_entries .bind(this,player_name),30000);' –

+0

@TheSmose是的,但应该指出,它不适用于旧版浏览器(如IE8)。 – bfavaretto

+0

@bfavaretto:谢谢,控制台中没有更多的错误。问题是它仍然不能正常工作,因为它应该:默认情况下,我想要加载所有条目(所以我用0调用它):。说它不断地在默认选项(0)和所选参数(player_name)之间切换。我的脚本是否已经发疯了?有没有办法阻止它? – Adam