programing

getJSON 동기

easyjava 2023. 3. 25. 14:08
반응형

getJSON 동기

목표: 데이터베이스에 추가될 때마다($.ajax에서 submit_to_db.php로 넘어갈 경우) 데이터베이스에서 데이터를 가져와 main.php를 새로 고칩니다(draw_polygon을 통해 더욱 명확해집니다).

그래서 기본적으로 나는 메인을 가지고 있다.php는 데이터베이스에 저장되는 배열을 받기 위해 다른 php를 호출하고, 다른 php를 호출하여 배열을 반환하기 위해 json을 호출합니다.

$(document).ready(function() {
    get_from_db();
    $('#button_cancel').click(function(){
       $.ajax({
          url: 'submit_to_db.php',
          type: 'POST',
          data: {list_item: selected_from_list},

          success: function(result){
             ...
             get_from_db();
          }
       });
    });
    function get_from_db(){
         $.getJSON('get_from_db.php', function(data) {
             ...
             draw_polygon(data);
         });
    }
 });

내 경우엔, 내가 한 일은get_from_db함수 호출getJSON실제로 데이터베이스에서 데이터를 가져오고 데이터를 사용하여draw_polygon하지만 그렇게 해야 하나요?저는 완전 초보라서 처음 해보는 거예요.getJSON솔직히 말하면 아약스도요그래서 질문입니다.비동기 기능은 실제로 어떻게 작동합니까?기능을 호출하는 대신 다른 회피책이 있습니까?get_from_db와 함께getJSON(동기화 되어 있지 않죠?그래서 기능 내에 없을 때는 페이지가 갱신되지 않는 건가요?)항상 - 좋아요$.ajax와 함께async: false(그런데 작동하지 않았습니다.)내 접근 방식은 효과가 있지만, 다른 더 좋은 방법이 있을지도 모른다고 생각했어요.방법을 배우고 싶어요.

좀 더 명확하게 하기 위해 다음과 같은 목표를 달성하고자 합니다.

  1. @start/ 페이지, 데이터베이스에서 데이터 가져오기(현재 경유)getJSON)
  2. 그리기 또는 그리기canvas사용방법data
  3. [완료] 버튼을 클릭하면 데이터베이스가 갱신됩니다.
  4. 데이터를 자동으로 다시 가져와 캔버스에 변경 내용을 다시 그리고 싶습니다.

$.getJSON()은 Ajax 설정을 사용하므로 글로벌 Ajax 설정을 다음과 같이 설정합니다.

// Set the global configs to synchronous 
$.ajaxSetup({
    async: false
});

// Your $.getJSON() request is now synchronous...

// Set the global configs back to asynchronous 
$.ajaxSetup({
    async: true
});

Asynchronously는 요청이 백그라운드에서 실행 중임을 의미하며, 응답을 받으면 함수를 호출합니다.이 방법은 결과를 얻고 싶지만 요청 내에서 앱을 사용할 수 있는 경우에 가장 적합합니다.직접 응답하려면 동기화 요청을 확인하십시오.이 요청은 응답을 받을 때까지 스크립트 실행을 일시 중지하고 응답을 받을 때까지 사용자는 아무것도 수행할 수 없습니다.다음 방법으로 전환할 수 있습니다.

async: false,

예를 들어 다음과 같습니다.

$.ajax({
    url: "myurl",
    async: false,
    ...
})

$.getJSON()은 다음 내용을 요약한 것으로 문서에 기재되어 있듯이 설정을 받아들이지 않습니다.

$.ajax({
  dataType: "json",
  url: url,
  data: data,
  success: success
});

따라서 요청을 다시 작성하기만 하면 async:false가 예상대로 작동합니다.

$.getJSON()의 약어 표기법입니다.$.ajax()동기하도록 설정할 수 있습니다(jQuery.getJ 참조).SONJQuery.ajax):

$.ajax({
  dataType: "json",
  url: url,
  data: data,
  async: false, 
  success: function(data) {
      ...
      draw_polygon(data);
  }
});

다만, 동기 콜은 피하도록 해 주세요.jQuery doc에서 인용(비동기 프로펠러 참조):

교차 도메인 요청 및 dataType: "jsonp" 요청은 동기 작업을 지원하지 않습니다.동기요구는 일시적으로 브라우저를 잠그고 요청이 활성화되어 있는 동안 모든 액션이 비활성화될 수 있습니다.

다음과 같이 jQuery Deferred를 시도할 수 있습니다.

var jqxhr = $.getJSON(url);
jqxhr.done(function(data) {
    ...
    draw_polygon(data);
});

언급URL : https://stackoverflow.com/questions/13009755/getjson-synchronous

반응형