我确信这应该有效,所以不知道为什么不这样做。
我将数据从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>
答案 0 :(得分: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中,但只是隐藏它直到动画完成。
答案 1 :(得分:2)
您正在使用 jQuery 1.10.x ,其中成功方法为deprecated
:
弃用通知:jqXHR.success(),jqXHR.error()和 从jQuery 1.8开始,不推荐使用jqXHR.complete()回调函数。准备 你的代码最终删除,使用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); // ' , '
})