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 ...

問題は、resultSet.desc が常に「未定義」を返すことですが、Firebug を使用して最後の行にブレークポイントを追加し、[(続行)] をクリックすると、resultSet.desc が期待どおりに機能します。

4

2 に答える 2

1

Ajax はデフォルトで非同期です。ajax リクエストの同期設定を設定することもできますasync:false,が、これは悪い方法です。

進むべき道は、「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 に答える
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 に答える