サーバー側関数を呼び出そうとする次の 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
}
コード ビハインドは同じままでした。