这是我之前question的延续。
我想我可能会很接近,但另一方面,到目前为止,我有可能误解所有事情。
在下面的代码中,我的问题是代码中的注释
我想要完成的是通过ajax获取一些数据,将其作为响应返回。
我应该提一下,代码结构必须保持尽可能接近我在这里发布的内容。那就是:
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);
}
答案 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/改变它。