2012-11-22 133 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