0

我有这个 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 ...

问题是当我使用 Firebug 并在最后一行添加断点然后单击(继续)resultSet.desc 按预期工作时,resultSet.desc 总是返回“未定义”。

4

2 回答 2

1

ajax 调用是异步的(根据定义......)。所以你必须把做作放在成功处理程序中:

$.ajax({ ...
    success : function(t) {
        resultSet = t.d;
        jQuery(this).after("<div style='color:#E3E3E3; margin-bottom:10px;'>" +
            resultSet.desc +
        "</div>" );
    }
)};
于 2012-12-03T14:37:49.300 回答
1

Ajax 默认是异步的。您可以尝试设置 ajax 请求同步设置:async:false,但这是一个不好的方法。

要走的路是在成功回调函数中编写逻辑代码,将 ref 保留在“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>" );
            }
        });
于 2012-12-03T14:38:14.553 回答