我需要将一个额外的参数传递.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的第一个参数将成为this
return函数的主体。其他参数将被 前置 到原来的参数。
以下代码显示了如何使用绑定。对于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调用返回的结果传递给回调。 问题答案: 解决方案是通过闭包绑定变量。 作为一个更基本的示例,下面是一个示例函数,该函数接收并调用一个回调函数,以及一个示例回调函数: 这将调用回调并提供一个参数。现在,您想提供一个附加