亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

jQuery將更多參數傳遞給回調

jQuery將更多參數傳遞給回調

互換的青春 2019-08-14 17:13:46
jQuery將更多參數傳遞給回調有沒有辦法將更多數據傳遞給jQuery中的回調函數?我有兩個函數,我希望回調$.post,例如,傳遞AJAX調用的結果數據,以及一些自定義參數function clicked() {     var myDiv = $("#my-div");     // ERROR: Says data not defined     $.post("someurl.php",someData,doSomething(data, myDiv),"json");      // ERROR: Would pass in myDiv as curData (wrong)     $.post("someurl.php",someData,doSomething(data, myDiv),"json"); }function doSomething(curData, curDiv) {}我希望能夠將自己的參數傳遞給回調,以及從AJAX調用返回的結果。
查看完整描述

3 回答

?
心有法竹

TA貢獻1866條經驗 獲得超5個贊

解決方案是通過閉包綁定變量。


作為一個更基本的例子,這里是一個接收和調用回調函數的示例函數,以及一個示例回調函數:

function callbackReceiver(callback) {
    callback("Hello World");}function callback(value1, value2) {
    console.log(value1, value2);}

這會調用回調并提供單個參數?,F在你想提供一個額外的參數,所以你將回調包裝在閉包中。

callbackReceiver(callback);     // "Hello World", undefinedcallbackReceiver(function(value) {
    callback(value, "Foo Bar"); // "Hello World", "Foo Bar"});

或者,更簡單地使用ES6箭頭功能

callbackReceiver(value => callback(value, "Foo Bar")); // "Hello World", "Foo Bar"

至于你的具體例子,我沒有.post在jQuery中使用該函數,但是對文檔的快速掃描表明回調應該是具有以下簽名的函數指針

function callBack(data, textStatus, jqXHR) {};

因此我認為解決方案如下:

var doSomething = function(extraStuff) {
    return function(data, textStatus, jqXHR) {
        // do something with extraStuff
    };};var clicked = function() {
    var extraStuff = {
        myParam1: 'foo',
        myParam2: 'bar'
    }; // an object / whatever extra params you wish to pass.

    $.post("someurl.php", someData, doSomething(extraStuff), "json");};

怎么了?

在最后一行中,doSomething(extraStuff)調用和該調用的結果是一個函數指針。

因為extraStuff它作為參數傳遞給doSomething它在doSomething函數的范圍內。

extraStuff在返回的匿名內部函數中引用doSomething它時,它被閉包到外部函數的extraStuff參數。doSomething返回后即使如此也是如此。

我沒有測試過上面的內容,但是我在過去的24小時內編寫了非常相似的代碼,它的工作原理正如我所描述的那樣。

您當然可以傳遞多個變量而不是單個'extraStuff'對象,具體取決于您的個人偏好/編碼標準。


查看完整回答
反對 回復 2019-08-14
?
呼喚遠方

TA貢獻1856條經驗 獲得超11個贊

使用時doSomething(data, myDiv),實際上是調用函數而不是引用它。

您可以doStomething直接傳遞函數,但必須確保它具有正確的簽名。

如果你想按照它的方式保持doSomething,你可以將它的調用包裝在一個匿名函數中。

function clicked() {
    var myDiv = $("#my-div");
    $.post("someurl.php",someData, function(data){ 
      doSomething(data, myDiv)
    },"json"); }function doSomething(curData, curDiv) {
    ...}

在匿名函數代碼中,您可以使用封閉范圍中定義的變量。這是Javascript作用域的工作方式。


查看完整回答
反對 回復 2019-08-14
  • 3 回答
  • 0 關注
  • 593 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號