简体   繁体   English

ASP.NET:jQuery Ajax结果未定义

[英]ASP.NET: jQuery Ajax result not defined

I have this jQuery ajax: 我有这个jQuery ajax:

        // ... omitted code ...

        var data = "{'TagName':'" + TagName + "'}";

        var resultSet = 0;

        jQuery.ajax(
        {
            type: "POST",
            url: '<%= ResolveUrl("~/Webservices/TagWebServices.asmx/GetTagByTagName") %>',
            data: data,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (t)
            {
                resultSet = t.d;
            }
        });

        jQuery(this).after("<div style='color:#E3E3E3; margin-bottom:10px;'>" +
        resultSet.desc +
        "</div>" );

        // ... omitted code ...

The problem is that resultSet.desc always returns "undefined" BUT when I use Firebug and add a breaking point in the last line and then click (Continue) resultSet.desc works as expected. 问题是resultSet.desc总是返回“undefined”但是当我使用Firebug并在最后一行添加一个断点然后单击(继续)resultSet.desc按预期工作。

An ajax call is Asynchronous (by definition...). ajax调用是异步的(根据定义......)。 So you have to put the affectation in the success handler: 所以你必须在成功处理程序中加入效果:

$.ajax({ ...
    success : function(t) {
        resultSet = t.d;
        jQuery(this).after("<div style='color:#E3E3E3; margin-bottom:10px;'>" +
            resultSet.desc +
        "</div>" );
    }
)};

Ajax is asynchronous by default. 默认情况下,Ajax是异步的。 You could try to set ajax request synchronous setting: async:false, but this is a bad way. 您可以尝试设置ajax请求同步设置: async:false,但这是一种不好的方法。

The way to go is to code your logic in the success callback function keeping ref on 'this' object. 要做的就是在成功回调函数中编写逻辑代码,保持对'this'对象的引用。

var data = "{'TagName':'" + TagName + "'}";

        var resultSet = 0,
            that = this;

        jQuery.ajax(
        {
            type: "POST",
            url: '<%= ResolveUrl("~/Webservices/TagWebServices.asmx/GetTagByTagName") %>',
            data: data,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (t)
            {
                resultSet = t.d;
                 jQuery(that).after("<div style='color:#E3E3E3; margin-bottom:10px;'>" +
                    resultSet.desc +
                    "</div>" );
            }
        });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM