我需要一些帮助来确定如何从第二个ajax调用中获取数据,而不是第一个。
我有这个调用我的ajax调用的方法
var projectWithIssues = getProjects().done(function(result) {
....
}
当我查看结果时,我会在第一次ajax调用(getEnt_PodType()。done())上返回结果。我想从getProjects()中的第二个ajax调用中获得结果。我理解我得到第一个结果的原因是因为我在第一次ajax调用时得到了回报。但是,如果我没有返回那里。我在上面的行中得到了一个未定义的。如何从第二次调用中返回数据?
function getEnt_PodType() {
var ent_PodType;
var oDataUrl = //URL to my data;
return $.ajax({
url: oDataUrl,
type: "GET",
async: true,
beforeSend: function (xhr) {
xhr.setRequestHeader("ACCEPT", accept);
},
success: function (xhr, textStatus) {
}
});
}
function getProjects() {
return getEnt_PodType().done(function (res) {
var ent_PodType;
if (res.d.results != undefined) {
ent_PodType = res.d.results[0].Ent_PodType;
}
console.log("The ent pod type value is " + ent_PodType);
var QUERY_FILTER =
"$filter=Ent_PodType eq '" + ent_PodType + "'";
var url = restUrl + QUERY_FILTER;
// I want to return the results from this ajax call
$.ajax({
url: url,
type: "GET",
async: true,
beforeSend: function (xhr) {
xhr.setRequestHeader("ACCEPT", accept);
},
success: function (xhr, textStatus) {
//projects = parseODataResultTest(xhr);
//return projects;
}
});
});
}
提前致谢!
答案 0 :(得分:1)
尝试使用deferred.then
中找到的模式// first request
var request = $.ajax(url1),
chained = request.then(function( data ) {
console.log(data) // first request response data
// return second request
return $.ajax(url2)
});
chained.then(function( data ) {
console.log(data) // second request response data
// data retrieved from url2 as provided by the first request
});
var request = $.ajax("https://gist.githubusercontent.com/guest271314/23e61e522a14d45a35e1/raw/62775b7420f8df6b3d83244270d26495e40a1e9d/ticker.json"), // first request , `html` document
chained = request.then(function( data ) {
console.log(data) // `["abc"]`
// return `data` from second request
return $.ajax("https://gist.githubusercontent.com/guest271314/6a76aa9d2921350c9d53/raw/49fbc054731540fa68b565e398d3574fde7366e9/abc.txt")
});
chained.then(function( data ) {
console.log(data) // `abc123`
// data retrieved from url2 as provided by the first request
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
&#13;
答案 1 :(得分:0)
使用.then
代替.done
,它可以更好地链接函数。
将代码分开,以便两个AJAX调用位于不同的函数中,并使这两个函数return
成为$.ajax
调用的结果。然后您可以使用:
func1().then(func2).then(...);
func2
将传递第一个AJAX调用的结果,然后的结果将传递给最终then
中的任何函数。
在你的情况下,你也可以在链中调用parseODataResultTest
,然后最终函数将被调用所需的数据,即:
getEnt_PodType().then(getProjects).then(parseODataResultTest).then(function(projects) {
// use projects here, and _only_ here because it won't
// be in scope or defined anywhere else
...
});