当前位置: 首页 > 面试题库 >

将额外的参数传递给jquery ajax promise回调

越高峻
2023-03-14
问题内容

我需要将一个额外的参数传递.done给jquery ajax调用的promise回调:

$.post("MyUrl", JSON.stringify(data))
        .done(onMyUrlLoaded);

标准回调如下所示:

function onMyUrlLoaded(data, textStatus, jqXHR) { /* function code */ };

但是我需要将一个额外的参数传递给我的回调,如下所示:

function onMyUrlLoaded(data, textStatus, jqXHR, extraParam) { /* code */ };

我该怎么做?

注意:这个问题不是重复的,因为它是关于promise回调的。此外,这个问题比据说重复的问题大了两年,并且给出了更为彻底的答案,以及关于诺言的具体答案。


问题答案:

我发现包括一个新的间接级别真的很容易,就像这样:

var extraParam = 'xyz';

$.post("MyUrl", JSON.stringify(data))
        .done(function(a,b,c) { onMyUrlLoaded(a, b, c, extraParam); });

这样,除了三个标准参数外,回调还将接收extraParam。

当然,如果将promise存储在变量中(例如,由函数返回的变量),也可以执行以下操作:

function getUrl() {
  // some code ...
  var promise = $.post("MyUrl", JSON.stringify(data));
  return promise;
}

可以这样调用和使用:

var promise = getUrl();
var extraParam = 'xyz';
promise.done(function(a,b,c) { onMyUrlLoaded(a, b, c, extraParam); });

这样做的语法较短,其中包括使用bind。

调用bind函数时,会得到一个新函数。传递给bind的第一个参数将成为thisreturn函数的主体。其他参数将被 前置 到原来的参数。

以下代码显示了如何使用绑定。对于TL; DR,请看最后两个代码

// To show the results in the page

var $log = $('#log');

var log = function(text) {

    $log.append(text+'<br/>');

};



// This returns a promise, and resolves it after the specified

// timeout. This behaves like a jQuery ajax call (but for the

// provided timeout)

var trigger = function(timeout) {

    log('<b>trigger</b> invoked');

    var deferred = $.Deferred();

    setTimeout(function() {

        log('<b>trigger</b> resolving promise');

        deferred.resolve('A','B');

    }, timeout);

    return deferred;

};



// This is the function we want to invoke

// The promise returns a and b - the extra params

// must be supplied in some way

var extraParams = function(extra1, extra2, a, b) {

    log('<b>extraParams</b> extra1:' + extra1);

    log('<b>extraParams</b> extra2:' + extra2);

    log('<b>extraParams</b> a:' + a);

    log('<b>extraParams</b> b:' + b);

};





// Doing it using indirection

trigger(500).then(function(a,b) {

  extraParams('extra1','extra2',a,b);

});



// Doing it using bind()

trigger(1200).then(

  extraParams.bind(this,'extra1','extra2')

);


<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="log">

</div>


 类似资料:
  • 问题内容: 我有以下功能。WordPress功能,但这实际上是一个PHP问题。它们根据每个对象的元数据中的属性对我的对象进行排序。 我想在第一个函数中传递一个字符串。这将使我可以重复使用此代码,因为我可以将其应用于各种元数据属性。 但是我不明白如何将 额外的 参数传递给usort回调。我试图制作一个JS风格的匿名函数,但是服务器上的PHP版本太旧,并引发了语法错误。 非常感谢您提供的任何帮助-或将

  • 问题内容: 我有一个函数,将回调函数作为参数,并用一个参数调用它。 我还有一个带有两个参数的函数:和。 我想将函数作为参数传递给,但我也想作为第二个参数()传递给。我怎样才能做到这一点? 问题答案: 只需创建一个包装回调: 或使用ECMAScript 6箭头功能:

  • 问题内容: 在我的 JSF 2.0 (在 JBoss AS 7上 )项目中,我希望在我的Ajax提交的表单上显示一个在开始和完成阶段触发的小图标状态,以使最终用户知道仍有事情发生。 该primefaces是没有用在这里,因为我想有在我的网页不同的地方很多不同的图标。 我在此问题中找到了一些解决方案:“如何在同一输入中显示不同的ajax状态?”,但是我仍然有一个问题:为了使我的javascript函

  • 问题内容: 我想将一些参数从Viewset传递给DRF Serializer类,因此我已经尝试过: 观看次数 基本上,我想将基于查询字符串的一些值从视图传递给Serializer类,然后将它们分配给字段。 这些字段实际上不包含在“模型”中,而是动态创建的字段。 这个问题stackoverflow中的情况相同,但我无法理解答案。 在这种情况下,任何人都可以帮助我或为我提供更好的选择。 问题答案: 对

  • 问题内容: 我正在尝试将一些参数传递给用作回调的函数,该怎么做? 问题答案: 如果您想要更一般的东西,可以使用arguments变量,如下所示: 但是否则,您的示例可以正常工作(可以在测试器中使用arguments [0]代替回调)

  • 问题内容: 有没有办法将更多数据传递到jQuery中的回调函数中? 我有两个函数,例如,我希望回调到,以传递AJAX调用的结果数据以及一些自定义参数 我希望能够将自己的参数以及AJAX调用返回的结果传递给回调。 问题答案: 解决方案是通过闭包绑定变量。 作为一个更基本的示例,下面是一个示例函数,该函数接收并调用一个回调函数,以及一个示例回调函数: 这将调用回调并提供一个参数。现在,您想提供一个附加