treska
treska

Reputation: 21

Merge objects received from Ajax calls

I'm trying to merge two objects I receive as JSON via Ajax, but I can not access the variable and declaring it global. What am I doing wrong?

var parametroswatcher = {
        // asinid: $('#rate').attr('data-id'),
        asinid: GetURLParameter('asin'),
        mod: '0'
    };

    var post = $.post("../../likes/like.php", parametros, 'json');
    post.done(function( data ) {
    postdata = jQuery.parseJSON(data);

    });
    var postwatch = $.post("../../watcher/watch.php", parametroswatcher, 'json');
    postwatch.done(function( data ) {
    postwatchdata = jQuery.parseJSON(data);

    });
    var postmerge = $.extend(postdata,postwatchdata);

    console.log(postmerge);

The answer of postdata = jQuery.parseJSON(data) should be: {"resplike":"needlogin"}.

And the answer of postwatchdata = jQuery.parseJSON(data) should be: {"respwatch":"needlogin"}.

But to access the console, instead of getting postdata and postwatchdata merged, I get an empty object.

Object {} product.js:61

Edit: I want when post and postwatch done, use data in product function.

The answer of postdata = jQuery.parseJSON(data) should be: {"resplike":"needlogin"}.

And the answer of postwatchdata = jQuery.parseJSON(data) should be: {"respwatch":"needlogin"}.

 function product(data){       

        var obj = jQuery.parseJSON(data);

        if (obj.resplike=='like'){
        var respuesta = 'No te gusta';
        }
        else if(obj.resplike=='dislike'){
        var respuesta = 'Te gusta';....blabla

I want to get in obj: {"resplike":"needlogin", "respwatch":"needlogin"}

Upvotes: 0

Views: 158

Answers (1)

Arun P Johny
Arun P Johny

Reputation: 388416

You cannot handle the result of an asynchronous call like that. All operations done on a async function call must be done within the callbacks of that async method. read more about this in answer

var parametroswatcher = {
    // asinid: $('#rate').attr('data-id'),
    asinid: GetURLParameter('asin'),
    mod: '0'
};

var post = $.post("../../likes/like.php", parametros, 'json');
var postwatch = $.post("../../watcher/watch.php", parametroswatcher, 'json');

$.when(post, postwatch).then(function(arg1, arg2){
    var postmerge = $.extend(arg1[0], arg2[0]);
    console.log(postmerge);
})

Also since you need to wait for the responses from two different requests you can use $.when() which will back the success handlers once all the passed promises are resolved.

Upvotes: 2

Related Questions