1

如何通过 jQuery 执行以下操作?

var xmlhttp;

if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp = new XMLHttpRequest();
}
else {// code for IE6, IE5
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        document.getElementByID('statusDisplay').innerHTML = xmlhttp.responseText; // show loaded content
    } else if (xmlhttp.readyState >= 1 && xmlhttp.status == 200) /* if(xmlhttp.readyState>=2 && xmlhttp.status==200) */ {
        document.getElementByID('statusDisplay').innerHTML = '<img src="ajax_load.gif" />'; // show ajax loading image
    }
}
xmlhttp.open("GET", "path/to/file.php", true);
xmlhttp.send();

我主要感兴趣的是如何检索 readyStatea 和状态,以及如何从这些函数中检索响应文本(或多或少像这样):

$.ajax({url: 'path/to/file.php', async: true, success: function(){
    // how can I get the responseText here?
}, whileLoading: function(){
    // does such a parameter actually exist?
}});

提前致谢!

4

4 回答 4

2

jQuery 不支持对 readyStates 的“本机”(jQuery'ish)访问。

interactive例如,没有回调可以代表一个readyState===3.

responseText无论如何,您可以访问success callbackfrom.ajax()

$.ajax({
   url:      'some.pl',
   dataType: 'text',
   type:     'GET',
   success:  function(data){
      // data represents xhr.responseText here
   }
});

无论如何,如果需要,该.ajax()方法会返回XMLHttpRequest您可以访问的内容。

var myxhr = $.ajax({});
myxhr._onreadystatechange = myxhr.onreadystatechange;

myxhr.onreadystatechange = function(){
    myxhr._onreadystatechange();
    if(myxhr.readyState === 3) {}  // or whatever
};

这是该问题的可能解决方法。但一般来说,您将在ajax event callbacks.
此外,它XMLHttpRequest object传递给了很多回调,beforeSend例如errorsuccess

有关详细信息,请参阅http://api.jquery.com/jQuery.ajax/

于 2010-10-11T09:22:51.030 回答
2

要回答你的第一个问题,成功回调函数需要几个参数,其中一个是返回的数据,所以:

$.ajax({url: 'path/to/file.php', async: true, success: function(data){
    // data
}, whileLoading: function(){
    // there is no whileLoading callback function
}});

要回答您的第二个问题,没有这样的回调函数whileLoading。有关更多信息,请参阅文档:http: //api.jquery.com/jQuery.ajax/

于 2010-10-11T09:26:19.650 回答
0

$.ajax()返回它生成的 XmlHttpRequest,因此您可以通过这种方式访问​​它,例如:

var xhr = $.ajax({url: 'path/to/file.php', async: true, success: function(data){
    // use data here for the response
}});
xhr.onreadystatechange = function() {
  if (xhr.readyState == 4 && xhr.status == 200) {
    $('#statusDisplay').html(xhr.responseText);
  } else if (xhr.readyState >= 1 && xhr.status == 200) {
    $('#statusDisplay').html('<img src="ajax_load.gif" />');
  }
};

您可能想要的是beforeSenddata(fist 参数) in success,如下所示:

$.ajax({
  url: 'path/to/file.php', 
  beforeSend: function() { 
    $('#statusDisplay').html('<img src="ajax_load.gif" />');
  },
  success: function(data) {
    $('#statusDisplay').html(data);
  }
});
于 2010-10-11T09:28:04.813 回答
0

从 jQuery 1.5 开始,$.ajax()返回一个jqXHR 对象

这意味着:

然而,没有提供 onreadystatechange 机制,因为 success、error、complete 和 statusCode 涵盖了所有可能的需求

jAndy 的解决方案将持续更长时间。

我知道无法从 jqXHR 访问 XMLHttpRequest 对象。因此,如果您希望响应请求过程中的更改,并且您使用的是 jQuery 1.5,那么看起来您最好依赖 jqXHR 的方法。

于 2011-03-17T18:14:49.503 回答