Armen
Armen

Reputation: 4202

Jquery ajax parametric callback and variable scope

I'm not so much pro in javascript variable scopes and got stuck with one question.

If i have function which dose ajax call and then call my callback

function doAjaxFunc(param, callback) 
{
  $.ajax({
    type: 'GET',
    url: '/some/url/'+param,
    success: function(data){        
        callback(data);
    },
    dataType:'json'
  });
}

function someCallback1(ajaxResp){
   // DO someting 1
}

function someCallback2(ajaxResp){
   // DO someting 2
}

// exec
doAjaxFunc(1, someCallback1);
doAjaxFunc(2, someCallback2);

As ajax is async and it can be that sever will process param=1 case longer then param=2 is it possible that someCallback1 and someCallback2 will process not their responses. I mean callback argument value will be somehow mixed ?

If possible give some explanation details in answer

Upvotes: 1

Views: 48

Answers (2)

Mostafa Sabeghi
Mostafa Sabeghi

Reputation: 382

Check this example , i hope it is some helpful to understand scope in JavaScript

var isFirstCall=false;
function doAjax(param)
{
  if(!isFirstCall)
  {
    //for example after do ajax
    var millisecondsToWait = 1000;
    setTimeout(function() {
    console.log(param);  
    }, millisecondsToWait);
  }
  isFirstCall=true;
  console.log(param);  
}

doAjax('first call');
doAjax('second call');

Upvotes: 0

Rory McCrossan
Rory McCrossan

Reputation: 337560

I mean callback argument value will be somehow mixed?

No. The callbacks will be called in completely separate invocations within scope of the originating AJAX success handler. There will be no cross-contamination of the data from either request.

Also, just as an aside, you can change this:

success: function(data){        
    callback(data);
},

To just this:

success: callback,

Upvotes: 1

Related Questions