2

我确信这应该可以,所以不知道为什么不可以。

我正在将数据从 ajax 成功回调附加到 DOM,然后访问新附加的 DOM 的一部分,但它返回空白且没有错误:

success: function(data) {
    $(data).insertAfter('h1');
},
complete: function(data) {
    var serverlat = $('.pop-lat').text();
    var serverlng = $('.pop-lng').text();

    alert(serverlat + ',' + serverlng); // ' , '
}

通过 ajax 返回的标记

<div class="pop-lat">55.8613148</div>
<div class="pop-lng">-4.2676099</div>
4

2 回答 2

5

您在回调中的完整代码success如下所示:

if (data != 0) {
    $('#enquiry-form').fadeOut('fast', function () {
        // animation has completed so append quotation form
        $(data).insertAfter('h1');
    });

} else {
    // spam form submission
    alert('error');
}

您只是在动画完成后附加数据,到那时complete回调已经执行,并且您的数据不存在。

您需要将其更改为:

if (data != 0) {
    var $data = $(data)
    $data.insertAfter('h1').hide();

    $('#enquiry-form').fadeOut('fast', function () {
        $data.show();
    });

} else {
    // spam form submission
    alert('error');
}

确保它在 DOM 中,但只是隐藏它直到动画完成。

于 2013-05-29T21:10:58.263 回答
2

您正在使用jQuery 1.10.x,其中成功方法是deprecated

弃用通知:jqXHR.success()、jqXHR.error() 和 jqXHR.complete() 回调自 jQuery 1.8 起已弃用。要为最终删除准备代码,请改用 jqXHR.done()、jqXHR.fail() 和 jqXHR.always()。

所以让我们试试这个:

$.ajax({
    //your code here but without success and complete!!
}).done(function(data) {
    var data = $(data).insertAfter('h1');
    var serverlat = data.find('.pop-lat').text();
    var serverlng = data.find('.pop-lng').text();

    alert(serverlat + ',' + serverlng); // ' , '
})
于 2013-05-29T21:15:40.440 回答