0

サーバー側関数を呼び出そうとする次の JavaScript コードがあります。

    function server_GetStats(nodeID) {
        var result = PageMethods.getStats(nodeID);
        return result;
    }

    setInterval(function () {
        newVal = parseInt(server_GetStats(1089)) + parseInt(server_GetStats(1090));
        rate = (newVal - val) / (pollTime / updateCounterTime);
    }, pollTime);

そして、これは呼び出されているサーバー側関数です:

    [WebMethod]
    public static int getStats(object nodeID)
    {
        int stat= 0;
        SqlConnection conn = new SqlConnection();
        string connStr = ConfigurationManager.ConnectionStrings["ApplicationServices"].ToString();
        conn.ConnectionString = connStr;
        conn.Open();

        string sql = "SELECT stat FROM NODE_PROPERTIES WHERE NodeID = " + Int32.Parse(nodeID.ToString());
        SqlCommand cmd = new SqlCommand(sql, conn);

        stat = Int32.Parse((cmd.ExecuteScalar().ToString()));
        conn.Close();
        return stat;
    }

asp:ScriptManager も aspx ページに追加しました。なぜ私がNaNを取得しているのか、私の人生では理解できません。SQLステートメントもOKであることを確認しました。誰かが私が間違っていることに光を当てることができますか?

答え:

提案されたように、コールバック関数を追加しました。最終的には次のようになりました。

    setInterval(function () {
        newVal = 0;
        server_GetStats(1089, 1090);
    }, pollTime);

    function server_GetStats(nodeID) {
        PageMethods.getStats(nodeID, OnGetStatsSuccess, OnGetStatsFailure);
    }

    function OnGetStatsSuccess(result) {
        newVal = parseInt(result);
        rate = (newVal - val) / (pollTime / updateCounterTime);
    }

    function OnGetStatsFailure(result) {
        //do something when your server-side function fails to return the desired value
    }

コード ビハインドは同じままでした。

4

2 に答える 2

0

このチュートリアルに従ってみてください。また、最初に webmethod から何らかの固定値を返してみてください (データベースへのクエリによる有効期限のために、JavaScript が NaN を返している可能性があります)。

于 2012-10-02T21:38:36.580 に答える
0

を呼び出すと、PageMethod非同期で呼び出されます。つまり、 を呼び出すとserver_GetStats(1089)、イベントが完了する前にその関数から返されPageMethodます。コードを機能させるには、呼び出しのコールバックを定義する必要がありますPageMethod。これらの行に沿ったもの:

var values = 0;

function myCallback(result) {
    values += parseInt(result);

    // Maybe call a function here that notifies/changes the UI.
}

function server_GetStats(nodeID) {
    PageMethods.getStats(nodeID, myCallback);
}

参照: http://www.geekzilla.co.uk/View30F417D1-8E5B-4C03-99EB-379F167F26B6.htm

于 2012-10-02T21:47:40.047 に答える