我正在使用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);
}
};
非常感谢任何援助.
解决方法:
要直接回答你的问题,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节点*,而不是load()将其视为的HTML字符串.这就是为什么你看到输出的HTML字符串,而不是被解析的HTML字符串.
* append()calls domManip()
内部,其本身calls jQuery.buildFragment()
,其中ends up creating a Text node如果传递的字符串看起来不像HTML字符串
您真正需要做的是检测响应是“整页刷新”还是“逐字母响应”.鉴于您的example response,您可以通过以下方式执行此操作:
$('#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替换整个页面有点“代码味道”.我宁愿将用户重定向到新网址,要么只替换< body>中的网页.或后代.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。