2013-02-11 78 views
1

即時通訊在JavaScript中是相當新的 這裏是我的外部js文件。JavaScript的方法undefined

(function ($, connection) {  
"use strict"; 

var conn = connection.serverHub; 
connection.hub.url = 'http://localhost:51283/signalr'; 

function trackUser(username, roleid, sessionid, ipaddress) { 
    var page = document.location.pathname;   
    conn.server.joinUser(username, roleid, ipaddress, page, sessionid).done(); 
} 

// signalr client method 
conn.client.receivedNotification = function (item) { 
    alert(item); 
    conn.server.notifiedUser().done(); 
}; 
$(function() { 
    connection.hub.start().done(function() { 
     trackUser('<%= session("USERNAME")%>', '<%= session("ROLE")%>', '<%= Session.SessionID%>', '<%=Request.UserHostAddress%>');//da attivare solo in produzione 
    }).fail(function() { alert("failed"); }); 
}); }(jQuery, $.connection)); 

,這是我如何調用我的方法

<body> 
<script src="http://localhost:51283/Scripts/jquery-1.9.1.min.js"></script> 
<script src="http://localhost:51283/Scripts/jquery.signalR-1.0.0-rc2.min.js"></script> 
<script src="http://localhost:51283/signalr/hubs"></script> 
<script src="myexternaljs.js"></script> 
<script> 
    trackUser('<%= session("USERNAME")%>', '<%= session("ROLE")%>', '<%= Session.SessionID%>', '<%=Request.UserHostAddress%>');//da attivare solo in produzione 
</script> 
</body> 

當我試圖調用trackUser方法和我得到在沒有定義

在那裏我做錯了trackUser?

由於事先

回答

4

你的功能被一個匿名範圍(function ($, connection) { })的內部限定。在該範圍之外將無法訪問。您可以創建一個全局變量,並將其分配給您的函數:

window.trackUser = function(username, roleid, sessionid, ipaddress) { 
    ... 
}; 
+0

我是怎麼定義它,讓它在signalr中工作呢? – whebz 2013-02-11 15:45:02

+0

我對signalr並不太熟悉,但是我認爲如果你完全像你這樣定義它,它只會用'window.trackUser = function'來代替'function trackUser'。 – 2013-02-11 15:52:12

0

它是未定義的,因爲它不在全局範圍內。在您的匿名函數中添加window.trackUser = trackUser或將您的函數聲明移至全局範圍。