我正在使用ajax请求从服务器检索文本字符串。我试过使用.load()但问题是它在运行我的回调函数之前将文本注入到页面中(它只是逐个字母地显示文本)。
所以,为了缓解这一点,我已经转移到.ajax()并在成功回调中使用了我的函数。这可以直接显示文本。
这是我的问题。当服务器中没有其他字符串时,该站点应该将您重定向到另一个页面。这正是使用.load()时发生的情况。
但是,使用.ajax()时,服务器中的原始HTML会注入当前页面并且无法正确呈现。
我不知道如何解决这个问题,而且我已经在网上搜索了一段时间了。以下是每种方法的代码。
.load()方法(没有逐字母回调)
$('#nextButton').click(function(){
$('#thonow').load('next.php');
});
.ajax()方法(逐字回调)
$('#nextButton').click(function(){
$.ajax({
url: 'next.php',
dataType: 'text',
success: function(result) {
$('#thonow').html("");
lbyl('#thonow',result,0,50);
}
});
});
以防你需要lbyl函数......
var lbyl = function (target, message, index, interval) {
if (index < message.length) {
$(target).append(message[index++]);
setTimeout(function () {
lbyl(target, message, index, interval);
}, interval);
}
};
非常感谢任何协助。
答案 0 :(得分:5)
要直接回答您的问题,ajax()
相当于$('#thonow').load('next.php')
;
jQuery.ajax('next.php', {
type: 'GET',
dataType: 'html'
}).done(function (response) {
$('#thonow').html(response);
});
请注意load()
有more logic in it,因此所有 load()
来电都不等同于此ajax()
来电,但在中情况,是。
然而,这实际上并没有帮助解决您的问题。由于您的lbyl
函数append()
一次只能响应一个字符,因此jQuery将每个字符视为Text
节点*,而不是HTML字符串load()
将其视为。这就是为什么你看到输出的HTML字符串,而不是正在解析的HTML字符串。
* append()
calls domManip()
,calls jQuery.buildFragment()
,ends up creating a Text node如果传递的字符串example response看起来不像HTML字符串
您真正需要做的是检测响应是&#34;整页刷新&#34;还是&#34;逐字母响应&#34;。鉴于您的{{3}},您可以通过以下方式执行此操作:
$('#nextButton').click(function(){
$.ajax({
url: 'next.php',
dataType: 'text',
success: function(result) {
if (result.slice(0, 15) === '<!DOCTYPE html>') {
document.write(result);
document.close();
} else {
$('#thonow').html("");
lbyl('#thonow',result,0,50);
}
}
});
});
请注意,通过AJAX替换整个页面有一点代码味道&#34;。我宁愿将用户重定向到新网址,或只替换<body>
或后代的网页。