2010-03-08 122 views
19

我正在使用jQuery $ .ajax()函數。我已經把它放到父函數中,它將一些值傳遞給ajax函數。我想要做的是有一個用戶定義的回調函數,它從ajax成功函數中獲取數據參數。

以下是我在想會的工作,但它不是:

testFunc = function(str, callback) { 
    // Send our params 
    var data = 'some data to send'; 
    $.ajax({ 
     type: 'POST', 
     url: 'http://www.myurl.com', 
     data: data, 
     success: callback 
    }); 
} 

然後,我希望能夠調用該函數,並傳遞我的自定義函數,這樣我可以用成功的功能從該函數內部數據:

testFunc('my string data', function(data){ 
    alert(data); 
}); 

我想這是一樣的:

testFunc = function(str, callback) { 
    // Send our params 
    var data = 'some data to send'; 
    $.ajax({ 
     type: 'POST', 
     url: 'http://www.myurl.com', 
     data: data, 
     success: function(data) { 
      alert(data); 
     } 
    }); 
} 
+0

現你確定你獲得了「成功」? – Jeremy 2010-03-08 18:10:00

+0

是的,我通過「成功」獲得了一些數據。 – 2010-03-08 18:14:37

回答

29

工作正常,我:

<script src="/jquery.js"></script> 
<script> 
var callback = function(data, textStatus, xhr) 
{ 
    alert(data + "\t" + textStatus); 
} 

var test = function(str, cb) { 
    var data = 'Input values'; 
    $.ajax({ 
     type: 'post', 
     url: 'http://www.mydomain.com/ajaxscript', 
     data: data, 
     success: cb 
    }); 
} 
test('Hello, world', callback); 
</script> 
+0

不知道我錯過了什麼,但按照你的例子,它完美地工作。 謝謝! – 2010-03-08 18:17:13

1

我相信你的問題是要傳遞testFunct一個字符串,而不是一個函數對象,(是,甚至有可能?)

1

雖然我不是100%確定你想要什麼(也許今天我的腦子很慢),這裏是一個類似用途的一個例子,你的描述:

function GetProcedureById(procedureId) 
{ 
    var includeMaster = true; 
    pString = '{"procedureId":"' + procedureId.toString() + '","includeMaster":"' + includeMaster.toString() + '"}'; 
    $.ajax({ 
     type: "POST", 
     contentType: "application/json; charset=utf-8", 
     data: pString, 
     datatype: "json", 
     dataFilter: function(data) 
     { 
      var msg; 
      if (typeof (JSON) !== 'undefined' && 
        typeof (JSON.parse) === 'function') 
       msg = JSON.parse(data); 
      else 
       msg = eval('(' + data + ')'); 
      if (msg.hasOwnProperty('d')) 
       return msg.d; 
      else 
       return msg; 
     }, 
     url: "webservice/ProcedureCodesService.asmx/GetProcedureById", 
     success: function(msg) 
     { 
      LoadProcedure(msg); 
     }, 
     failure: function(msg) 
     { 
      // $("#sometextplace").text("Procedure did not load"); 
     } 
    }); 
}; 
/* build the Procedure option list */ 
function LoadProcedure(jdata) 
{ 
    if (jdata.length < 10) 
    { 
     $("select#cptIcdProcedureSelect").attr('size', jdata.length); 
    } 
    else 
    { 
     $("select#cptIcdProcedureSelect").attr('size', '10'); 
    }; 
    var options = ''; 
    for (var i = 0; i < jdata.length; i++) 
    { 
     options += '<option value="' + jdata[i].Description + '">' + jdata[i].Description + ' (' + jdata[i].ProcedureCode + ')' + '</option>'; 
    }; 
    $("select#cptIcdProcedureSelect").html(options); 
}; 
2

在第一個代碼塊,你永遠使用str參數。你的意思是說以下嗎?

testFunc = function(str, callback) { 
    $.ajax({ 
     type: 'POST', 
     url: 'http://www.myurl.com', 
     data: str, 
     success: callback 
    }); 
} 
2

這是我要做的事

function run_ajax(obj) { 
    $.ajax({ 
     type:"POST", 
     url: prefix, 
     data: obj.pdata, 
     dataType: 'json', 
     error: function(data) { 
      //do error stuff 
     }, 
     success: function(data) { 

      if(obj.func){ 
       obj.func(data); 
      } 

     } 
    }); 
} 

alert_func(data){ 
    //do what you want with data 
} 

var obj= {}; 
obj.pdata = {sumbit:"somevalue"}; // post variable data 
obj.func = alert_func; 
run_ajax(obj); 
+0

我相信你不會爲一個簡單的用例單獨聲明對象屬性,爲什麼不使用對象字面值呢?我可以問JS對GC有什麼影響嗎(如果有的話)? – MrMesees 2015-11-10 15:16:28

21

您可以使用此關鍵字訪問自定義數據,傳遞給$阿賈克斯()功能:

$.ajax({ 
     // ... // --> put ajax configuration parameters here 
     yourCustomData: {param1: 'any value', time: '1h24'}, // put your custom key/value pair here 
     success: successHandler 
    }); 

    function successHandler(data, textStatus, jqXHR) { 
     alert(this.yourCustomData.param1); // shows "any value" 
     console.log(this.yourCustomData.time); 
    } 
+0

這是一個很好的,乾淨的方法,不涉及創建新的功能。謝謝! – Acyra 2013-02-20 16:11:26

相關問題