【问题标题】:Save temporary Ajax parameters in jQuery在 jQuery 中保存临时 Ajax 参数
【发布时间】:2009-08-17 09:07:52
【问题描述】:

我正在开发一个脚本化程度很高的 Web 应用程序,现在正在处理一些错误。但要做到这一点,我需要一种方法来访问为特定 AJAX 请求提供给 jQuery 的 AJAX 参数。我在 jquery.com 上没有找到任何关于它的东西,所以我问你们是否知道如何实现它。

这是一个我想如何在代码方面做到这一点的示例:

function add_recording(filename) {
    updateCounter('addRecording','up');
    jQuery.ajax({
        url: '/cgi-bin/apps/ajax/Storyboard',
        type: 'POST',
        dataType: 'json',
        data: {
            sid: sid,
            story: story,
            screen_id: screen_id,
            mode: 'add_record',
            file_name: filename
        },
        success: function(json) {
            updateCounter('addRecording','down');
            id = json[0].id;
            create_record(id, 1, 1, json);
        },
        error: function() {
            updateCounter('addRecording','error',hereBeData);
        }
    })
}

hereBeData 将是所需的数据(如 url、类型、dataType 和实际数据)。

updateCounter 是一个用新信息更新状态区的函数。它也是根据 hereBeData 中收集的信息向用户通知错误以及生成关闭和重试按钮的区域。

【问题讨论】:

    标签: javascript jquery ajax web-applications


    【解决方案1】:

    无论调用 complete() success()error() - this 将等于传递给 $.ajax() 的对象,尽管 URL 和数据的值并不总是完全相同 - 它会转换参数并稍微编辑一下对象。您可以向对象添加自定义键以记住您的内容:

    $.ajax({
      url: '/',
      data: {test:'test'},
      // we make a little 'extra copy' here in case we need it later in an event
      remember: {url:'/', data:{test:'test'}},
    
      error: function() {
        alert(this.remember.data.test + ': error');
      },
      success: function() {
        alert(this.remember.data.test + ': success');
      },
      complete: function() {
        alert(this.remember.data.url + ': complete');
      }
    });
    

    当然 - 由于您最初是从某个来源设置此数据 - 您可以依靠变量范围来为您保留它:

    $("someelement").click(function() {
       var theURL = $(this).attr('href');
       var theData = { text: $(this).text(); }
       $.ajax({ 
         url: theUrl,
         data: theData,
         error: function() {
           alert('There was an error loading '+theURL);
         } 
       });
    
       // but look out for situations like this: 
       theURL = 'something else';
    });
    

    【讨论】:

    • 是的 - 当然是 - 他的特殊情况只是询问错误事件,但无论调用哪个事件(可能是成功/错误然后完成 - this 仍然指出到ajax函数的object参数。
    • 我可以看到这是怎么回事。所以无论怎么做,我都需要明确地存储它以达到我的目的。
    • 是的 - 该示例中的“url”被重写为“/?test=test”并且“data”设置为 null,如果它是 POST,则 URL 仍然是“/”并且数据变成“test=test”——所以要么从那里解构,要么(更容易)推荐——创建一个 jquery 不会弄乱的键并在那里设置重要信息。或者只是将它留在父函数的变量中。
    • 这就是我要做的。我希望有一个更优雅的解决方案,但效果一样好。
    【解决方案2】:

    查看callback for error中可以获取哪些参数。

    function (XMLHttpRequest, textStatus, errorThrown) {
      // typically only one of textStatus or errorThrown 
      // will have info
      this; // the options for this ajax request
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用 ajax complete event,它将用于请求的 ajaxOptions 传递给您。成功和失败的请求都会触发 complete。

      complete : function (event, XMLHttpRequest, ajaxOptions) {
         //store ajaxOptions here
         //1 way is to use the .data on the body for example
         $('body').data('myLastAjaxRequest', ajaxOptions);
      }
      

      然后您可以使用

      var ajaxOptions = $('body').data('myLastAjaxRequest');
      

      【讨论】:

      • 那里有很多信息(网址和类型都在那里)但我找不到我的数据
      • 应该都在 ajaxOptions.data 我测试过可以确认这个
      猜你喜欢
      • 1970-01-01
      • 2012-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-26
      • 2017-02-13
      相关资源
      最近更新 更多