Linda
Linda

Reputation: 2405

pass data through a ajax request to a callback function

Is it possible to pass data through a Ajax request to the Callback function without global variables?

for e.g. this request function should pass the passData through the callback function which should get also normal response data?!

function rquest(callback, passData){
    $.ajax({
         type: "POST",
         url: someURL,
         success: callback(passData)
    });
};  

function myCallback(data, passData){
    var responseData = data;
    var SomeOtherData = passData
    //do Something
};

rquest(myCallback, "Hello World");

so "Hello World" should be in passData and data should be the normal response from server...if i do it in this way data is "Hello World" and passData is undefined.

Upvotes: 1

Views: 6077

Answers (2)

Pradeep Potnuru
Pradeep Potnuru

Reputation: 768

I found the answer in the below link - some more patterns are available to achieve this - Adding some of the content from the reference answer.

The pattern you'd like to use could work if you create a closure inside your rssToTarget function:

function rssToTarget(element) {
  return function (xmlData) {
    // work with element and the data returned from the server
  }
}

function doSomething(url, elem) {
    $.ajax({ type: "GET",
         url: url,
         dataType: "xml",
         success: rssToTarget(elem)
       });
}

When rssToTarget(elem) is executed, the element parameter is stored in the closure, and the callback function is returned, waiting to be executed.

Reference link https://stackoverflow.com/a/1194187/3082706

Upvotes: 2

Rory McCrossan
Rory McCrossan

Reputation: 337560

Wrap the call to the provided callback in an anonymous function. Try this:

function rquest(callback, passData){
    $.ajax({
         type: "POST",
         url: someURL,
         success: function(data) { 
             callback(data, passData)
         }
    });
};  

function myCallback(data, passData) {
    var responseData = data;
    var SomeOtherData = passData
    //do Something
};

rquest(myCallback, "Hello World");

Upvotes: 8

Related Questions