【问题标题】:How to retrieve the XHR parameters after a jQuery Ajax call?如何在 jQuery Ajax 调用后检索 XHR 参数?
【发布时间】:2011-01-19 13:08:30
【问题描述】:

在我的项目中,我有一列包含几个带有 jQ​​uery Ajax 调用的过滤器,以减少 main.php <div id="target"> 中显示的产品数量。工作正常,但是在对结果进行排序或单击响应文件 main.php 中的分页后,我需要能够使用 main.php 的最后一个 Ajax 调用的 $_GET 参数在过滤器列中执行新的过滤器操作.这些参数在 Firebug 选项卡 Net - tab XHR - tab Parameters 中显示得很好。

但我找不到一种方法来检索参数并将它们放入触发 Ajax 调用的函数中:

     function updateStatus(content_show, data) {

     jQuery.ajax({
         method: "get",
         url: content_show,
         data: data,
         beforeSend: function(){
            jQuery("#target").html('<p><img src="images/ajax_load.gif" /></p>');
            }, //show loading just when link is clicked
         success: function(html) {

             // update status element            
            jQuery('#target').show("slow");
            jQuery('#target').html(html);
            }

     });
 }

在我的过滤器文件中,我有一个功能可以选中和取消选中复选框并启动 ajax 调用:

function check_them(obj,URL) {
  var getstr = "";
  var man_id_selected ="";

 for (i=0; i<obj.getElementsByTagName("input").length; i++) {
    if (obj.getElementsByTagName("input")[i].type == "checkbox") {

       if (obj.getElementsByTagName("input")[i].checked) {

        getstr = "" + obj.getElementsByTagName("input")[i].name + "=";
        man_id_selected += obj.getElementsByTagName("input")[i].value + "_";
       } else {
     <!--     getstr += obj.getElementsByTagName("input")[i].name + "=&";-->
       }
    }

  }
        getUrlStatus('main.php', function(status) { // try to find $_GET parameters of main.php
          alert(status);
           });
  updateStatus(URL, getstr+man_id_selected);    
   }

这里我也尝试使用以下方法查找 XHR 参数:

 function getUrlStatus(url, callback) {
     jQuery.ajax({
         url: url,
         complete: function(xhr) {
             callback(xhr.status);

         }
     });
 }

但后者当然只会返回状态 200 而不是参数。

编辑

经过更多的阅读和测试,我几乎解决了这个问题,方法是更改​​我的原始 PHP 代码和函数,以便使用回调正确格式化函数 updateStatus:

     function updateStatus(url, base_url, new_parameters, old_parameters) {

     jQuery.ajax({
         method: 'get',
         url: base_url,
         data: new_parameters,
         beforeSend: function(){
            jQuery("#target").html('<p><img src="images/ajax_load.gif" /></p>');
            }, //show loading just when link is clicked
         complete: function(){ 
            jQuery("#target").hide("fast");
            }, //stop showing loading when the process is complete


         success: function(html) {
             // update status element            
            jQuery('#target').show("slow");
            jQuery('#target').html(html);
            callback(this.url)
         }
     });
 }

现在我只有在 PHP 中检索和调用新 url 到 $url 时遇到了小问题。我将对此进行详细说明,并可能发布一个新主题。

【问题讨论】:

  • 我很难解密这里的问题?您显然遇到了某种问题,但您似乎无法很好地解释问题是什么或已经解决了 +CLOSE
  • 我可以理解你错过了这个问题,因为在撰写本文时,我认为我在 Ajax 调用中做错了......最后我发现问题出在用于触发 ajax 的 PHP 代码中call ... 我认为解释我对 PHP 代码的调整是题外话,但正如您在重新格式化的函数 updateStatus 中看到的那样。我已经拆分了完整的 url(其中包含所有 $_GET 参数)。单独传递 base_url 和参数。希望这能澄清到目前为止的解决方案!谢谢!

标签: jquery xmlhttprequest


【解决方案1】:

为了将来参考,如果您使用的是 jQuery 1.4+,success 函数实际上接受 3 个参数,只是后两个是可选的,data 通常是唯一需要的。

成功(数据,文本状态, XMLHttpRequest):函数

一个函数 如果请求成功则调用。这 函数获得三个参数: 从服务器返回的数据, 根据'dataType'格式化 范围;描述 地位;和 XMLHttpRequest 对象 (从 jQuery 1.4 开始可用)。这是 一个 Ajax 事件。

所以下次如果您需要获取有关 XHR 响应的更多信息,您可以像这样设置您的成功函数:

success: function(data, status, xhr) {
    // tests with status and xhr, etc...
}

【讨论】:

  • 这可能就是他所追求的。我不知道。我仍然投票赞成你的答案,因为可能就是这样。
  • 感谢您的回答!当然,我用 succes 函数做了很多测试。但是 - 如上所述 - 在函数 updateStatus 中调用的初始数据不正确..因此成功数据没有帮助!
  • 这表明如何检索xhr 对象,但我认为问题是询问请求参数,大概在xhr 属性中。知道是哪一个吗?
猜你喜欢
  • 2012-05-09
  • 1970-01-01
  • 1970-01-01
  • 2013-02-11
  • 2013-01-25
  • 2018-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多