什么是.ajax()相当于.load()?

时间:2015-03-22 22:40:20

标签: javascript php jquery ajax

我正在使用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);
  }
};

非常感谢任何协助。

1 个答案:

答案 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>或后代的网页。