从AJAX请求中获取价值

时间:2013-12-26 18:28:11

标签: jquery ajax

这曾经是我的代码:

//At "click" I retrieve value from myFunctionA and use it in myFunctionB
$("#myButton").click(function()
{
    var response = myFunctionA();

    if(response) myFunctionB(response);
});

//Inside myFunctionA I perform an AJAX call (you will see it's really and "SJAX")
function myFunctionA()
{
    var response = myAjax();

    return response;
}

//This is not really and AJAX because of the async:false
function myAjax()
{
    var myJSON = {}

    $.ajax({
        url: "some_url.php",
        dataType: "json",
        async: false,
        error: function(jqXHR, textStatus, errorThrown)
        {
            alert(errorThrown);
        },
        success: function(data, textStatus, jqXHR)
        {
            myJSON = data;
        }
    });

    return myJSON;
}

事情就是以上工作得很好。我请求一个值,等待它,然后在我需要的地方使用它。显然SJAX部分不应该完成,我必须做一个真正的AJAX请求。因此,当我在寻找一种方法来实现这一点时,我偶然发现了诸如

之类的问题

jQuery: Return data after ajax call success

非常好的答案,如

https://stackoverflow.com/a/14220323/702353

并开始阅读有关Deferred.done()等方法的内容。但是,我无法获得原始SJAX代码的相同结果。所以我的问题是:

  • 是否可以使用AJAX请求执行我想要的操作?
  • 可以在不修改.click()代码的情况下完成吗?

以下是我正在处理的当前代码

$("#myButton").click(function()
{
    var response = myFunctionA();

    if(response) myFunctionB(response);
});

function myFunctionA()
{
    $.when(myAjax()).done(function(response)
    {
        return response;
    });
}

function myAjax()
{
    return $.ajax({
        url: "someurl.php",
        dataType: "json",
        error: function(jqXHR, textStatus, errorThrown)
        {
            alert(errorThrown);
        }
    });
}

谢谢你的时间!

1 个答案:

答案 0 :(得分:0)

这是需要做的事情:

$("#myButton").click(function() 
{
    $.when(myFunctionA()).done(function(response)
    {
        myFunctionB(response);
    });    
});

function myFunctionA()
{
    var dfd = new jQuery.Deferred();

    $.when(myAjax()).done(function(data, textStatus, jqXHR)
    {
        dfd.resolve(data);
    });     

    return dfd.promise();    
}

function myAjax()
{
    return $.ajax({
        url: "someurl.php",
        dataType: "json",
        error: function(jqXHR, textStatus, errorThrown)
        {
            alert(errorThrown);
        },
        success: function(data, textStatus, jqXHR)
        {
            return data;
        }
    });
}

answer part 2 {{3}}给了我很多帮助!