我有一个HTML页面,如http://jsfiddle.net/Lijo/zPAfF/6/所示。当单击“searchReportButton”按钮时,将调用javascript函数“checkSession”。在“checkSession”功能中,对jquery.ajax
下面列出的web method
进行了 context: this, //CONTEXT
次调用。 Web方法工作正常,我能够在javascript成功回调中将结果提醒为“ACTIVE”。
我已将上下文设置为此。
this
我希望以下代码能够提醒“正在加载...”文本。自设置success callback
以来,context
的假设将在if (result == "ACTIVE")
{
var selectedTable = $(this).closest('.dateFilter').siblings('.sentDatesSection').find('.reportSentDatesDiv');
alert($(selectedTable).text());
}
中有效。但它没有显示文字。
[WebMethod(CacheDuration = 0)]
public static string CheckSessionExpiry(string empID)
{
return "ACTIVE";
}
问题
为了在回调中获取上下文需要更正哪些内容?
网络方法
$(document).ready(function() {
var searchReportButton = $('.searchReportButton');
searchReportButton.click(function() {
var selectedTable = $(this).closest('.dateFilter').siblings('.sentDatesSection').find('.reportSentDatesDiv');
alert($(selectedTable).text());
checkSession();
return false;
});
});
function checkSession() {
var empID = 101;
alert('Function Reached');
$.ajax({
type: "POST",
url: "Error.aspx/CheckSessionExpiry",
data: '{"empID": "' + empID + '"}',
contentType: "application/json; charset=utf-8",
dataType: "json",
context: this,
//CONTEXT
success: handleSessionResult
});
}
function handleSessionResult(result) {
if (result.hasOwnProperty("d")) {
result = result.d
}
if (result == "ACTIVE") {
var selectedTable = $(this).closest('.dateFilter').siblings('.sentDatesSection').find('.reportSentDatesDiv');
alert($(selectedTable).text());
}
}
的jQuery
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1">
<title>Report List </title>
</head>
<body>
<form>
<div id="wrapper">
<div id="container">
<div id="centralContainer">
<div id="mainContainer">
<div id="contentHolderDiv" class="contentHolderDiv">
<div id="searchContainer" class="searchContainer">
<div id="entryValues" class="repeaterContainer">
<div class="repeaterTableBorder">
<div class="repeaterRecord">
<div class="repeaterIdentifier">
<div class="reportTitle">
Daily Financial Transaction:
</div>
</div>
<div class="viewLogTitle">
<div class="viewLogText">
View Report Log
</div>
</div>
<div id="reportLog" class="reportLog">
<div class="dateFilter">
<div class="filterElements">
<div class="filterContents">
<input type="submit" name="ctl00$detailContentPlaceholder$repReports$ctl00$btnSubmit"
value="Get Reports" id="detailContentPlaceholder_repReports_btnSubmit_0" class="searchReportButton" />
</div>
</div>
</div>
<div class="sentDatesSection">
<div class="reportSentDatesDiv">
<p>
Loading...</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="clear">
</div>
</div>
</div>
<div class="clear">
</div>
</div>
</div>
</div>
</form>
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.4.1.js"></script>
HTML
{{1}}
答案 0 :(得分:1)
将this
作为参数传递给checkSession
函数:
checkSession(this);
然后:
function checkSession(context) {
var empID = 101;
alert('Function Reached');
$.ajax({
type: "POST",
url: "Error.aspx/CheckSessionExpiry",
data: JSON.stringify({ empID: empID }),
contentType: "application/json; charset=utf-8",
dataType: "json",
context: context, //CONTEXT
success: handleSessionResult
}
});
}
另请注意我如何修复$.ajax
调用以使用JSON.stringify
方法,以确保请求是正确的JSON格式。 从不,我再说一遍,绝对不会使用字符串连接(+
运算符)来构建JSON。 JSON.stringify
方法本身内置于所有现代浏览器中。如果你必须支持来自Mesozoic era的某些浏览器,例如IE6,或者你可以将json2.js脚本引用到你的页面。
答案 1 :(得分:1)