Ohad Benita
Ohad Benita

Reputation: 543

Returning a POST result from an AJAX call in JavaScript

What I'm trying to do is the following in JS:

function getSuccessForTest(testName,version,fromRev,toRev,res) {        

        var params = {
            "methodToRun":"getSuccessForTest",
            "version":version,
            "startRev":fromRev,
            "endRev":toRev,
            "testName":testName     
        };          
        $.post("Stats.php", params,function(data){
            return parseInt(data.toString(),10);
        }, "json");         
    }   

    getSuccessForTest(data[i],version,fromRev,toRev,res);

What am I doing wrong ? whenever I make the call to getSuccessForTest, I get the POST result in Stats.php but the value isn't returned to the calling function.

Thanks in advance !

Upvotes: 1

Views: 144

Answers (4)

sandeep
sandeep

Reputation: 2234

return parseInt(data.toString(),10);

You cant return like that. either assign in some global variable or do process there with data

Upvotes: 0

San
San

Reputation: 542

use echo when you are return from stats.php. if this is not solving your issue then I would like to know what is the return method you are using for your ajax call handling script.

Upvotes: 0

Daniil Ryzhkov
Daniil Ryzhkov

Reputation: 7596

That's beacuse value is returned to the anonymous function (function(data){...). Use callbacks. Try this:

function getSuccessForTest(testName,version,fromRev,toRev,res, callback) {        

    var params = {
        "methodToRun":"getSuccessForTest",
        "version":version,
        "startRev":fromRev,
        "endRev":toRev,
        "testName":testName     
    };          
    $.post("Stats.php", params,function(data){
        callback(parseInt(data.toString(),10));
    }, "json");         
    }   

    getSuccessForTest(data[i],version,fromRev,toRev,res, function(res) {
        alert(res)
    } );

Upvotes: 1

T. Junghans
T. Junghans

Reputation: 11683

It's not working because the return is in the callback function given to $.post as a parameter. Since you're dealing with an ajax request which is asynchronous you need to use a callback for getSuccessForTest as well. Try this:

function getSuccessForTest(testName,version,fromRev,toRev,res, callback) {        

    var params = {
        "methodToRun":"getSuccessForTest",
        "version":version,
        "startRev":fromRev,
        "endRev":toRev,
        "testName":testName     
    };          
    $.post("Stats.php", params,function(data){
        callback(parseInt(data.toString(),10));
        //return parseInt(data.toString(),10);
    }, "json");         
}   

getSuccessForTest(data[i],version,fromRev,toRev,res, function (data) {
    alert(data); // This would be the value you wanted to return
});

Upvotes: 3

Related Questions