如何修改下面的代码以使用'success'在代码隐藏中调用testMethod()? 我需要等待testMesthod()的返回值并处理它。
$.ajax( {
url : 'myPage.aspx/testMethod',
type : "POST",
contentType : "application/json; charset=utf-8",
data : "{'name':'" + aNb + "'}",
dataType : "json"
}).done(function() {
alert("ok");
}).fail(function() {
alert("not ok");
});
上面的代码不起作用,因为最新的JQuery版本(1.10.1)被1.3.2覆盖。
谢谢
答案 0 :(得分:0)
您需要将回调函数传递给包装$(ajax)的函数。
function getData(ajaxQuery, callBack){
var ajaxHREF = 'your url';
$.ajax({
url: ajaxHREF,
type: "post",
data: ajaxQuery,
beforeSend: function ( xhr ) {
xhr.overrideMimeType("application/json");
},
success: function(response, textStatus, jqXHR){
var jsonData = $.parseJSON(response);
callBack (jsonData);
},
然而,更好的方法是全球成功事件。它更好,因为您可以使用调用的所有属性来启用结果的动态处理。创建全局成功事件inline = $(document).ajaxSuccess这将调用所有jquery ajax成功事件,因此您需要区分哪些调用适用于您的特定处理程序(对每个全局处理程序)。
$(document).ajaxSuccess(function(event, xhr, settings) {
var query = settings.data;
var mimeType = settings.mimeType;
if (query.match(/ameaningfulvalueforthishandler/)){
if(mimeType.match(/application\/json/)){
var jsonData = $.parseJSON(xhr.responseText);
}
}
}
答案 1 :(得分:0)
感谢回复,但我仍然没有看到callbacl如何帮助我。 我需要在代码隐藏中调用webmethod:testMethod() Ajax调用它,url =“myPage.aspx / testMethod”将'调用'webmethod testMethod(), 但它是异步的,并迅速返回到ajax调用的“成功”部分。 但是,我需要等待testMethod()完成处理,检索testMethod()返回的结果并处理它。 异步ajax将返回'success'而不等待testMethod()完成, 我们不会得到任何数据作为回应。 那么,回调如何帮助我实现呢?
function getData(ajaxQuery,callBack){
var ajaxHREF =“myPage.aspx / testMethod”;
$。AJAX({
url:ajaxHREF,
类型:“post”,
数据:ajaxQuery,
beforeSend:function(xhr){
xhr.overrideMimeType( “应用程序/ JSON”);
},
成功:功能(响应,textStatus,jqXHR){
var jsonData = $ .parseJSON(response);
callBack(jsonData);
});
谢谢
答案 2 :(得分:0)
@Karen Slon - 如果我正确理解了这个问题,我认为您需要在概念上将客户端与服务器端分开。 .success / .done或global ajaxSuccess事件中的回调使您的网页能够启动请求并在服务器端处理您的请求'myPage.aspx / testMethod'时继续处理。成功完成后,它将返回成功事件。现在,如果testMethod没有返回任何内容,那么您将发现自己处于成功事件事件中而没有结果。但除非web方法testMethod成功完成并返回控制,否则无法到达那里。示例中的.done事件仅具有警报(“ok”);.是什么让你相信在.done事件发生时web方法testMethod不完整?
查看这些帖子以获得更好的示例:
jQuery.ajax handling continue responses: "success:" vs ".done"?
http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/