1

javascriptのOOPはまったく新しいので、これが私の外部jsファイルです。

(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

2 に答える 2

4

関数は匿名スコープ ( function ($, connection) { }) 内で定義されています。その範囲外ではアクセスできません。グローバル変数を作成し、関数をそれに割り当てることができます。

window.trackUser = function(username, roleid, sessionid, ipaddress) {
   ...
};
于 2013-02-11T15:41:46.940 に答える
0

グローバル スコープにないため、未定義です。無名関数内に追加するかwindow.trackUser = trackUser、関数宣言をグローバル スコープに移動します。

于 2013-02-11T15:42:26.190 に答える