2013-04-11 50 views
0

現在我有了從cgi-script獲取一些數據的代碼。它完美的作品。

$.get('cgi/remote_user', function(data){ 
    $('#user_id').text(data); 
}); 

但是,如果我嘗試設置$('#user_id').text回調函數,它失敗Uncaught TypeError: Illegal invocation

$.get('cgi/remote_user', $('#user_id').text); 

任何想法,爲什麼它是什麼? $('#user_id').textfunction(data) {}功能相同..

我懷疑它可能是無效的調用上下文,我說得對嗎?

回答

1

原因是,當您獲得對text函數的引用時,它不再附加到該對象。它將調用全局上下文(窗口)而不是對象的上下文。

可以使用proxy方法的功能結合上下文:

var user = $('#user_id'); 
$.get('cgi/remote_user', $.proxy(user.text), user); 
+0

謝謝,現在我明白它是如何工作的細節。 – loentar 2013-04-11 06:12:40

0
$.get('cgi/remote_user', $('#user_id').text); 

類似寫:

var tmp = $('#user_id').text; 
$.get('cgi/remote_user', tmp); 

這是qeuivalent到

$.get('cgi/remote_user', $.fn.text); 

$('#user_id')this

你想要的是

$.get('cgi/remote_user', $.fn.text.bind($('#user_id'))); 
+0

IE 8及更早版本不支持'bind'方法,因此最好使用'$ .proxy'方法。 – Guffa 2013-04-11 06:13:09

相關問題