从AJAX请求获取值[第2部分]

时间:2013-12-27 15:35:02

标签: jquery ajax

这是我之前question的延续。

我想我可能会很接近,但另一方面,到目前为止,我有可能误解所有事情。

在下面的代码中,我的问题是代码中的注释

我想要完成的是通过ajax获取一些数据,将其作为响应返回。

我应该提一下,代码结构必须保持尽可能接近我在这里发布的内容。那就是:

  • 点击后,调用功能1
  • 该函数1调用泛型ajax函数2
  • 然后1处理从2返回的数据并返回其他内容
  • 返回点击事件,从1响应,我可以做任何我想做的事情

HTML

<button id="myButtonA">test A</button>
<button id="myButtonB">test B</button>

JS

//data_A.txt = {"key":"some_value_A"}
//data_B.txt = {"key":"some_value_B"} 

$(document).ready(function()
{
    $("#myButtonA").click(function()
    {
        $.when(myFunctionA()).done(function(response)
        {
            showValue(response); //this echoes {"key":"some_value_A"}
            //Is it possible to echo "yes: A"? instead the whole object?
        });
    });

    $("#myButtonB").click(function()
    {
        $.when(myFunctionB()).done(function(response)
        {
            showValue(response); //this echoes {"key":"some_value_B"}
            //Is it possible to echo "yes: B"? instead the whole object?
        });
    });      
});

function myFunctionA()
{
    var execution = AJAX("data_A.txt");

    return $.when(execution).done(function(data, textStatus, jqXHR)
    {
        var response = "";

        if(data.key == "some_value_A")
        {
            response = "yes: A";
        }
        else
        {
            response = "no: A";
        }

        return response;
    });     
}

function myFunctionB()
{
    var execution = AJAX("data_B.txt");

    return $.when(execution).done(function(data, textStatus, jqXHR)
    {
        var response = "";

        if(data.key == "some_value_B")
        {
            response = "yes: B";
        }
        else
        {
            response = "no: B";
        }

        return response;
    });     
}

function AJAX(source)
{
    return $.ajax({
        type: "POST",
        url: source,
        dataType: "json"
    }).done(function(data)
    {
        return data;
    }).fail(function(error)
    {
        alert(error);
    });
}

function showValue(val)
{
    console.log(val);
}

1 个答案:

答案 0 :(得分:1)

您希望在

中使用自己的延迟对象http://api.jquery.com/deferred.promise/
function myFunctionA()
{
    var execution = AJAX("data_A.txt");

    var dfd = new jQuery.Deferred();
    $.when(execution).done(function(data, textStatus, jqXHR)
    {
        var response = "";

        if(data.key == "some_value_A")
        {
            response = "yes: A";
        }
        else
        {
            response = "no: A";
        }

        dfd.resolve(response);
    });     

    return dfd.promise();
}

$ .when的返回仍然是$ .ajax使用的原始延迟对象,据我所知你不能/不应该http://api.jquery.com/deferred.resolveWith/改变它。