加载页面时如何从多个jquery ajax get请求获取多个输出?

时间:2018-08-14 10:58:14

标签: javascript jquery ajax rest

我正试图获取两个数据资源。我尝试在第一个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
                 }
              })
           }
        })
    })

我在某处犯错了吗?可以用这种方式做到吗?如果没有,替代解决方案是什么?预先感谢。

5 个答案:

答案 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!" );
  }
});

https://api.jquery.com/jquery.when/

答案 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用于调试,如果其余的调用实际上返回了数据。