На днях я нашел этот фреймворк AJAX .NET, и пока мне нравится с ним работать. Однако я не могу понять одну вещь (документация довольно скудная) - это как передавать переменные через скрипт AJAX. Вот что у меня есть на данный момент:
//default2.aspx.vb
<AjaxPro.AjaxMethod()> _
Public Shared Function testSomething(ByVal value As String) As String
Return value
End Function
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
AjaxPro.Utility.RegisterTypeForAjax(GetType(Default2))
End Sub
//default2.aspx
<a href = "#" onclick = "doTest(1);">test something</a>
<div id = "temp" style = "margin:15px 15px 0px 5px; padding:10px;"></div>
<script type = "text/javascript">
function doTest(x){
Default2.testSomething(doTest_callback,x)
}
function doTest_callback(res,x){
alert(res.value);
document.getElementById("temp").innerHTML = ">>>> " + x + " <<<<"
}
</script>
У меня есть несколько других тестовых функций, которые работают нормально, и они выполняют сравнительно более сложные операции. Кто-нибудь знает, как передавать переменные с помощью AjaxPro? Также приветствуются альтернативные методы!





Прошло много времени с тех пор, как я использовал этот фреймворк (версия 6.9.22.2, так что, возможно, все немного изменилось) - вы видели Платформа ASP.NET AJAX? Я не уверен, сколько работы Майкл проделал над этим с тех пор, как это вышло - наверняка его сообщения в блоге об этом иссякли примерно в июле 2007 года.
В любом случае, если я правильно понимаю ваш вопрос, вы хотите:
Во-первых, чтобы передать переменные вашим методам, не должны ли они стоять перед именем функции обратного вызова?
Чтобы получить начальные значения в обратном вызове, я либо:
Выбирая вариант 2, вы получите:
<a href = "#" onclick = "doTest(1);">test something</a>
<div id = "temp" style = "margin:15px 15px 0px 5px; padding:10px;"></div>
<script type = "text/javascript">
var initialValue;
function doTest(x){
initialValue= x;
Default2.testSomething(x, doTest_callback)
}
function doTest_callback(res){
alert(res.value);
document.getElementById("temp").innerHTML = ">>>> " + initialValue + " <<<<"
}
</script>
Основным недостатком этого является то, что если пользователь запускает ваш метод «doTest» с другим значением, пока вы все еще обрабатываете первый запрос, значение initialValue вполне могло измениться к моменту его запроса в doTest_callback.
Хм. Вы заметили какие-либо ошибки JavaScript? Если у вас установлены Firefox и FireBug, есть ли ошибки в консоли JavaScript?
Похоже, что-то не так с сгенерированными JS-файлами из компонента.
В AjaxPro вы сначала передаете параметры, а в качестве последнего - функцию обратного вызова. Если вы используете здесь анонимную функцию, вы можете получить доступ как к ответу, так и к исходному значению. Это выглядело бы примерно так:
function doTest(x){
Default2.testSomething(x, function(res){
doTest_callback(res.value, x);
});
}
function doTest_callback(resonseValue,originalValue){
alert("response: " + responseValue);
alert("original: " + originalValue);
}
Я знаю, что это старый, но я всегда использую AjaxPro и до сих пор использую его с .NET 4 - он по-прежнему помогает.
Если вы хотите передать дополнительную переменную с обратным вызовом и вернуть ее в результате, передайте значение после обратного вызова и используйте res.context для его получения.
Как это:
function CallSomething()
{
DoServerSide.MethodName(arg1, arg2, CallbackFunction, ExtraVar);
}
function CallbackFunction(res)
{
var result = res.value;
var extra = res.context;
}