2014-03-04 3 views
0

AJAX 호출이있는 사용자 목록을 얻었지만 AJAX 내에서 다른 AJAX를 호출하여 첫 ​​번째 AJAX 호출과 관련하여 얻을 수없는 정보를 얻습니다.jQuery AJAX 다른 AJAX 호출 내부. 동기화 및 완료된 문제

이것은 기본적으로 내가 사용하고있는 구조이며, 불필요한 코드를 제거했습니다. 여기저기서 일부 구문 오류가있을 수 있습니다. 하지만 코드는 기본적으로 작동하지만 몇 가지 문제가 있습니다. AJAX와 나는 다시 보여주고 싶은 완료되면

function doAJAX(){ 
    $(".loading").show(); 
    $("#table").hide(); 

    $.ajax({ 
    type: "POST", 
    url: "@Url.Action("Action", "Controller")", 
    data: { variable: varVariable}, 
    dataType: "json", 
    success: function (data) { 
     $.each(data, function (index, value) { 
      $.ajax({ 
       type: "POST", 
       url: "@Url.Action("Action", "Controller")", 
       data: { variable: value.id}, 
       success: function (data2) { 
       $.each(data2, function (index2, value2) { 
        $("#tableBody").append("<tr><td>" + value.test +"</td><td>" + value2.test +"</td></tr>"); 
       }); 
       } 
      }); 
     }); 
    } 
    }); 
} 
  1. 나는, 처음에 내 테이블을 숨 깁니다. 정확히 어디에 놓아야합니까? 첫 번째 AJAX 성공 함수의 끝 부분에 배치하더라도 다른 AJAX가 실행되는 동안 실행되기 때문에 작동하지 않습니다.

  2. 내 목록이 AJAX가 실행될 때마다 이상한 순서로 끝나고, 내 목록이 알파벳순으로 정렬되지만,이 AJAX는 매번 무작위로 끝납니다. 때로는 사용자 Adam이 시작될 때가 있습니다. 중간 등. 그것은이 두 이상한 순서

에 끝나는 이유는 아마 인 목록 자체는 괜찮 및 올바른 순서로

  • 는 아마 두 번째 AJAX 호출을 늦추고 수학을 많이 할 두 AJAX가 "함께"실행되지 않고 개별적으로 서로 동기화되도록하기 때문에 문제가 발생하고 AJAX가 완료되고 이제는 내 테이블을 보여줄 수있는 좋은 방법이 있습니까?

  • +2

    두 번째'ajax' 호출에'async : false'를 추가 할 수 있습니다. 그러나 브라우저가 정지 될 수 있습니다. – ojovirtual

    +0

    @HenrikP : 여기 만드는 아약스 전화 수준은 매우 복잡합니다. 가능한 경우 최대 데이터를 검색하기 위해 단일 아약스 호출을 시도하십시오. – dreamweiver

    +0

    @ojovirtual 이것은 이렇게하는 것 같습니다. 또한 동결 문제가 특정 브라우저가 아니라면 느린 컴퓨터에서 작동하는 것으로 보입니다. – HenrikP

    답변

    0

    루프 내에서 아약스 요청을 보내는 것은 좋은 생각처럼 보이지 않습니다. 왜 ID가 배열로 된 하나의 아약스 요청을 데이터로 보내지 않겠습니까? 서버 측 스크립트에서 사용자 레코드의 "WHERE id IN (id_list)"배열을 가져 와서 json 인코딩 된 객체로 반환 한 다음 이중 루프, 먼저 <tr>에 대해 필드 목록의 두 번째.

    서버에 대한 요청에서 무엇이 반환되는지 모르므로 코드를 제공하지 못해 죄송합니다.