2016-03-26 2 views
1

Мне нужно получить значения из двух разных URL-адресов, а затем объединить их. Я знаю, что было бы намного лучше, если бы я получил все данные в одном URL-адресе, но это то, что у меня есть, и мне нужно работать с ним.Работа с двумя URL-адресами в ajax

Я хочу распечатать значение a_value, но оно было распечатано, а b не вернул его значение. Я прочитал некоторые статьи о том, как сделать синхронные функции, но до сих пор не знаю, как реализовать его в моем коде, и не знаю, что является лучшим решением для моего дела. Я довольно новичок в JavaScript и по-прежнему нуждаюсь в помощи и руководстве.

function any_function() { 
     $.ajax(
      { 
       url : '/url1', 
       type: "GET", 
       success:function(data, textStatus, jqXHR) 
       { 
        $("#print").html(a(data)); 
       } 
      }); 
     } 


    function a(data){ 

     x = 'any value' //`do something with data and insert to this variable` 
     a_value = x + b(`some id that extracted from data`) 

     return a_value 
    } 


    function b(id){ 
    $.ajax({ 
       url: '/url2', 
       type: 'GET', 
       success: function (data, textStatus, jqXHR) { 
        b_value = c(data, id) 
       } 
      }); 
    return b_value 
    } 


    function c(data, id){ 
     //do something with `data` and return the value 
     return c_value 
    } 
+0

с использованием обещаний - это путь https://api.jquery.com/promise/ – lascort

ответ

4
function f() { 
    var request1 = $.ajax({ 
     url : '/url1', 
     type: 'GET' 
    }); 
    var request2 = $.ajax({ 
     url: '/url2', 
     type: 'GET' 
    }); 
    $.when(request1, request2).done(function(result1, result2){ 
     data1 = result1[0] 
     data2 = result2[0] 
     // r1 and r2 are arrays [ data, statusText, jqXHR ] 
     // Do stuff here with data1 and data2 
     // If you want to return use a callback or a promise 
    }) 
} 
+0

Спасибо за ответ. Где я должен найти данные, которые были вытащены ajax? Предполагается ли это быть в переменных 'url1' и' url2'? – Omri

+0

@Omri данные в result1 и result2 –

+0

Спасибо! У меня есть весь объект в result1 и result2. Как я могу получить только его данные? У меня «ajax success» data были только соответствующие json, а в вашем коде o был весь объект. – Omri

0

Это может быть сделано в синхронном выглядящий моды с обещаниями:

$.get(url1) 
.then(function(data1){ 
    return $.get(url2) 
}) 
.then(function(data2){ 
    return $.get(url3); 
}) 
.then(function(data3){ 
    // All done 
}); 
+0

Спасибо за ваш ответ. Как я уже сказал выше, у меня нет большого опыта работы с JavaScript. Можете ли вы показать мне, как именно я должен использовать свой вызов ajax в вашем коде? Мне просто нужно заменить url1 на настоящий URL? – Omri

+0

Запросы могут быть сделаны в parrallel, который был бы быстрее –

0

Вам просто нужно сделать второй вызов обработчика успеха первой:

function any_function() { 
    $.ajax({ 
      url : '/url1', 
      type: "GET", 
      success:function(data, textStatus, jqXHR) { 
       $("#print").html(a(data)); 
       b("someId"); 
      } 
    }); 
} 

function a(data){ 

    x = 'any value' //`do something with data and insert to this variable` 
    a_value = x + b(`some id that extracted from data`) 

    return a_value; 
} 

function b(id){ 
    $.ajax({ 
      url: '/url2', 
      type: 'GET', 
      success: function (data, textStatus, jqXHR) { 
       b_value = c(data, id); 
       return b_value; 
      } 
    }); 
} 


function c(data, id){ 
    //do something with `data` and return the value 
    return c_value 
} 
+1

Было бы лучше сделать оба запроса в parrallel –

+0

Пользователь спрашивает о способе сделать это синхронно, а не параллельно. –

+0

Пользователь хочет запустить код после выполнения обоих запросов. –

Смежные вопросы