0

如果我在我的 XHR 的 onreadystatechange 函数中,我可以很容易地做到document.title = xhr.responseText,但是如果我让函数返回 responseText,我不能设置一个等于我的 XHR 的外部包装器的变量来使它等于响应;有什么办法可以做到这一点吗?

我的包装:

ajax = function(url, cb)
 {
    xhr = (window.XMLHttpRequest)
        ? new XMLHttpRequest()
        : new ActiveXObject('Microsoft.XMLHTTP');
    xhr.onreadystatechange = function()
     {
        if (xhr.readyState == 4 && xhr.status == 200)
         {
            cb(xhr.responseText);
         };
     }
    xhr.open('get', url, true);
    xhr.send();
 };

现在,如果我做了类似的事情:

ajax('bacon.txt', function(_)
 {
    document.title = _;
 }

它绝对完美;document.title 实际上变成了调用 bacon.txt 的 responseText。但是,如果我尝试以这种方式实现它:

document.title = ajax('bacon.txt', function(_)
 {
    return _;
 }

没有这样的运气。谁能澄清这是为什么?};

4

2 回答 2

7

您将 ajax 函数的返回分配给标题。ajax 函数本身不返回任何内容。

AJAX 的全部意义在于该函数在收到任何响应之前立即返回它向服务器发出的请求。您正在将 undefined 分配给 title 属性(顺便说一句,我通常让我的 ajax 函数返回正在使用的 xhr 允许我在必要时中止)。

当请求完成时,回调(代码中的 cb)函数被调用,因此您的原始代码是有意义的,它会进行分配。

于 2009-03-06T21:26:37.523 回答
0

onreadystatechange 函数的结果与您的“ajax”函数不同...您可以使您的帖子同步,并使 ajax 函数返回相同,但如果响应需要,它最终会延迟浏览器中的用户响应太长。

你可以做的更好的是找到另一种方法,如你所愿。我的意思是,不要试图让它那样工作,因为它会更糟。

于 2009-03-06T21:31:05.127 回答