我正试图获取两个数据资源。我尝试在第一个get请求的成功函数中使用get request,但是似乎它们以某种方式覆盖了我,而我仅从第二个请求中获取数据。这是代码:
$( document ).ready(function() {
$.get({
url: "/WebProjekat/rest/users",
success: function(data) {
//do something with data
$.get({
url: "/WebProjekat/rest/articles/mostPopular",
success: function(data) {
//do something with data
}
})
}
})
})
我在某处犯错了吗?可以用这种方式做到吗?如果没有,替代解决方案是什么?预先感谢。
答案 0 :(得分:0)
为什么要通过成功功能发送第二个请求,如果第二个请求不使用第一个请求的响应,您也可以通过第二个请求来获取数据。
async Main() { // Note it's `async`, not `Async`
const result = await searchAndDoSomething(name); // note declaration
searchCompleteHandler(result);
}
答案 1 :(得分:0)
发生什么事,就是示波器问题了。当您调用第二个请求时,您将使用参数“ data”作为返回值,而在第一个请求的范围内已经有一个参数“ data”。因此,参数“数据”的内容将被第二个请求覆盖。
因此将第二个请求中的参数重命名为其他名称-f.e. data2-并将结果更改为所需的结果。
答案 2 :(得分:0)
//保留要测试的URL,然后替换。 //按照网络标签获取详细信息:
var ajaxFunction = function(url){
return $.ajax({
type:'GET',
url:url
})
}
ajaxFunction('https://jsonplaceholder.typicode.com/todos/1').then(function(data){
console.log(data);
ajaxFunction('https://jsonplaceholder.typicode.com/todos/2').then(function(data){
console.log(data)
});
},
function(error){
alert('Error reason:'+error)
}
)
答案 3 :(得分:0)
似乎您只是在尝试运行两个呼叫,而没有实际使用一个呼叫的数据来启动另一个呼叫-
另一种选择(可能更简洁的代码)是使用jQuery的jQuery.when()
。它允许您调用两个ajax调用(或任何异步过程),然后在它们都完成时对它们的响应进行处理。
我只是将示例直接从文档中移除:
$.when( $.ajax( "/page1.php" ), $.ajax( "/page2.php" ) ).done(function( a1, a2 ) {
// a1 and a2 are arguments resolved for the page1 and page2 ajax requests, respectively.
// Each argument is an array with the following structure: [ data, statusText, jqXHR ]
var data = a1[ 0 ] + a2[ 0 ]; // a1[ 0 ] = "Whip", a2[ 0 ] = " It"
if ( /Whip It/.test( data ) ) {
alert( "We got what we came for!" );
}
});
答案 4 :(得分:0)
我建议您尝试诺言。 Promise非常适合处理异步行为,自jQuery 1.5起,它们已针对$ .get,$。post等实现。
如果两个请求彼此独立,则更好的解决方案是:
Promise.all([$.get("/WebProjekat/rest/users").promise(),$.get("/WebProjekat/rest/articles/mostPopular").promise()]).then(function(resultsArray) {
var users = resultsArray[0];
var articles = resultsArray[1]
})
.catch(function(err){
//handle error
})
这会同时调用一个句柄。
只有完成两者的GET调用后,then函数才会被执行,以详细了解promise.all()
here
Google chrome has good developer tools用于调试,如果其余的调用实际上返回了数据。