jQuery: Ajax 호출 성공 후 데이터 반품하십시오.

내가 이런 간단한 전화 뭔가를해야합니다 어디에 있는 스크립트입니다 날 다시 보기입니다 값을 문자열으로.

function testAjax() {
    $.ajax({
      url: "getvalue.php",  
      success: function(data) {
         return data; 
      }
   });
}

내가 이 같은 일이 호출하십시오 신앙이니라

var output = testAjax(svar);  // output will be undefined...

값을 되돌려줍니다 미확인범은 어떻게 합니까? 아래 코드를 작동합니까 인컨텍스트 않는 듯 하다.

function testAjax() {
    $.ajax({
      url: "getvalue.php",  
      success: function(data) {

      }
   });
   return data; 
}
질문에 대한 의견 (2)
  • 참고: 이 질문에 지난 2월 2010년, 2015년, 2016-2017년 작성된 .&lt br&gt 지켜보리니 bottom.* 업데이트를 받을 수 있다.

    39, 아무것도 하지 않는 함수에서 너회가 can& 복귀하십시오 비동기적입니다. 약속하나요 너희는너희가 반환할 수 있다. 이러한 질문에 대한 답을 어떻게 내가 내 jQuery 작업하십시오 공약을 설명했다.

  • [JavaScript 반환하는 함수를 AJAX 호출 데이터] (https://stackoverflow.com/questions/5150571/javascript-function-that-returns-ajax-call-data/5150650 # 5150650)
  • [jQuery 이크스어 - 취소합니까 체인된 페이징됩니다 트리거합니다 error: 체인] (https://stackoverflow.com/questions/5111695/jquery-jqxhr-cancel-chained-calls-trigger-error-chain/5112734 # 5112734)
  • 왜 * 설정하시겠습니까 설명할 수 있다면 어떻게 하시겠습니까 반품해야 데이터 및 나중에 관심용 있을거라더군요 보다 구체적인 답을 어떻게 할 수 있게 해 줍니다. 일반적으로 대신:
function testAjax() {
  $.ajax({
    url: "getvalue.php",  
    success: function(data) {
      return data; 
    }
  });
}

테스타이아스 다음과 같은 함수를 작성할 수 있습니다

function testAjax() {
  return $.ajax({
      url: "getvalue.php"
  });
}

그런 다음 전달하십시오 약속하나요 다음과 같습니다.

var promise = testAjax();

약속하나요 보관할 수 있습니다, 주위에 있는 함수 호출을 사용할 수 있습니다 인수로 전달할 수 있습니다, 다시 사용할 수 있습니다, 하지만 함수에서 때 마지막으로 AJAX 호출 할 수 있는 데이터의 반환됨 의해 다음과 같은 해야 할 수 있습니다.

promise.success(function (data) {
  alert(data);
});
  • 자세한 내용은 아래 업데이트뿐 단순화됩니다 구문.) 이 시점에서 이 기능을 사용할 수 있는 데이터가 경우 그 즉시 호출되었을 됩니다. # 39, t 될 경우 그 즉시 isn& 호출되었을 데이터를 사용할 수 있습니다. 이 모든 것이 요점입니다 하고 직후 달러 있기 때문에 해당 데이터를 사용할 수 없는 호출하십시오 지아이아스 비동기적입니다. 가상화 기능을 위해 좋은 약속 은 다음과 같이 말했습니다. 내가 너 때문에 난 # 39, t, t # 39 can& 복귀하십시오 데이터 don& 할꺼이나 아직이라구요 쉐퍼드도 don& # 39, 블록 및 무리는너희들이 진정하라구요 그러하매 here& 싶지 않다, s a , 와 # 39 약속하나요 you& 대신 사용할 수 있고, 그냥 # 39 ll give it to 수 있으며, 나중에 다른 사람이 수행되 진행합니다. [ 데모 *] 이 슬라이드에서는 (http://jsfiddle.net/jW68r/). 업데이트 (2015년)

내가 위에서 설명한 (2011년 3월) 는 사용 방법은 [jquery 우회된 객체에는] (https://api.jquery.com/category/deferred-object/) 에서 동기식 코드 값을 반환하는 달성됩니다 비동기적으로 뭔가 해야 될 것 "이라고 말했다. 그러나 이 두 가지 - 값을 반환하는 함수 호출 할 수 있는 동기 중에서 선택할 수 있으며 (수 있을 경우) 또는 예외가 (can& # 39, t 값을 반환하는 경우). 이러한 사례는 거의 모두 promises/a+ 충족합니다 방식으로 exception handling) 는 동기식 코드를 강력하다. 그러나 버전을 포함한다) 에 해당하는 값을 찾는 핸들을 그냥 그랬다고 avamer 다소 복잡한 예외 처리 문제가 됩니다. 특히 전체 집중식으로 exception handling) 하고 있지만, 좋은 메시지를 통해 동기식 코드는 포기하는 것이 아니라 문제를 해결하고 계속하시겠습니까 러스롤링 실행 또는 기타 다른 부위에 같은 일부 또는 다른 예외 처리할 수 있는 프로그램. 코드 s 에서 콜 스택 있습니다. # 39 의 너회가 don& 비동기 호출, t, 예외 처리 인사이드라면 고급 사용자의 요청에 따라 공약을 Promises/A+ 사양명세 실질적으로 지원할 수 있는 의미있는 방식으로 처리할 수 있는 코드를 작성하는 것도 복잡한 예외 오류 및 활용 사례. Jquery 의 차이점 및 기타 구현을 위한 약속, 어떻게 jQuery 변환하십시오 Promises/A+ 호환일 http://schmidt. devlib. [Coming from jQuery] (https://github.com/kriskowal/q/wiki/Coming-from-jQuery) 에 크리스 코발 et al. wiki 의 Q 라이브러리 및 [공약 도착할 JavaScript] (http://www.html5rocks.com/en/tutorials/es6/promises/ # javascript 공약을 목차) 가 html5 에서 제이크 아치볼드 바위.

어떻게 반환되기를 진짜 약속하나요

이 함수는 from my 위 예제:

function testAjax() {
  return $.ajax({
      url: "getvalue.php"
  });
}

jquery 는 한 되돌려줍니다 이크스어 객체에는 [우회된 객체에는] (https://api.jquery.com/category/deferred-object/). 실제 사용 할 수 있습니다 - 복귀하십시오 약속하나요 변경하십시오 [방법을 wiki 의 Q] (https://github.com/kriskowal/q/wiki/Coming-from-jQuery # jquery 변환 약속 q):

function testAjax() {
  return Q($.ajax({
      url: "getvalue.php"
  }));
}

또는 using [방법을 HTML5 에서 바위 문서] (http://www.html5rocks.com/en/tutorials/es6/promises/ # javascript 공약을 목차):

function testAjax() {
  return Promise.resolve($.ajax({
      url: "getvalue.php"
  }));
}

이 '프로미세이어솔베 ($ 지아이아스 (.))' 도 지정하십시오. [설명한 '약속' 모듈에서는 문서용으로] (https://github.com/then/promise # 프로마이어솔베발루) 와 함께 작업하므로 합니다 [ES6 프로미세이어솔베 () ''] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve). 오늘 약속 es6 사용하려면 사용할 수 있는 [es6 약속하나요 module& 폴리필 () ',' s # 39] (https://github.com/jakearchibald/es6-promise # 자동 폴리필) 에서 제이크 아치볼드. 어디서 볼 수 없는 공약을 폴리필 http://schmidt. devlib. ES6 사용할 수 있습니다. [사용할 수 있습니까?: 약속] (http://caniuse.com/promises). 자세한 정보 참조.

promise.success(function (data) {
  alert(data);
});

쓸 수 있습니다.

promise.success(data => alert(data));

사용하거나 Promises/A+ API:

promise.then(data => alert(data));

반드시 항상 flfile. 거부 핸들러도 인컨텍스트 호스트당:

promise.then(data => alert(data), error => alert(error));

또는 호스트당:

promise.then(data => alert(data)).catch(error => alert(error));

항상 flfile. 거부 이유를 알 수 있는 이 슬라이드에서는 오토메이티드 핸들러도 약속을 합니다.

promise.then(data => alert("x is " + data.x));

이 구문은 않을 경우, 모든 브라우저는 아직 수축됐는데 you& 코드에서 # 39 를 실행할 수 있는지, 어떤 특정 브라우저를 쓸 때 re - [크롬 확장명은] (예: https://developer.chrome.com/extensions/getstarted) 는 [Firefox Add-on] (https://developer.mozilla.org/en-US/Add-ons) 또는 사용하는 데스크톱 응용 프로그램 또는 전자, n w.j스 마카베이스 (http://otl. [이 오토메이티드] (https://stackoverflow.com/questions/35803346/i-want-to-use-nodejs-as-front-end-and-back-end-in-my-application-can-you-sugges/35888163 # 35888163) 를 참조). 화살표 기능 지원을 위한 http://schmidt. devlib.:

성과 = 화살표 기능 * http://caniuse.com/

  • There is an 훨씬 새로운 기능을 기다리고 있는 '키워드 async 대신 새로운' 라는 구문을 지금 이 코드:
functionReturningPromise()
    .then(data => console.log('Data:', data))
    .catch(error => console.log('Error:', error));

작성할 수 있습니다.

try {
    let data = await functionReturningPromise();
    console.log('Data:', data);
} catch (error) {
    console.log('Error:', error);
}

내부에 있는 '키워드' 비동기 만든 함수를 때만 사용할 수 있습니다. 자세한 내용, 지켜보리니:

해설 (9)
해결책

데이터가 동기화 기능을 할 수 있는 유일한 방법은 반품하십시오 약간만이라도 호출하십시오 비동기 호출 대신 있으나, 그 위로 it& 기다리는 동안 # 39 의 응답 있지만브라우저에 동결시킬 것이라고 발표했다.

그 결과 처리하는 콜백 함수를 통과될 수 있습니다.

function testAjax(handleData) {
  $.ajax({
    url:"getvalue.php",  
    success:function(data) {
      handleData(data); 
    }
  });
}

Call it 다음과 같습니다.

testAjax(function(output){
  // here you use the output
});
// Note: the call won't wait for the result,
// so it will continue with the code here while waiting.
해설 (7)
    • 및 ajax 호출 위부의 반품하십시오 거짓값 비동기 옵션을 추가할 수 있습니다.
function testAjax() {
    var result="";
    $.ajax({
      url:"getvalue.php",
      async: false,  
      success:function(data) {
         result = data; 
      }
   });
   return result;
}
해설 (7)

나도 몰라 경우 보세요들 해결 있지만 또 다른 방법은 내가 추천합니까 그것을하지 및 작동하잖아:)

    ServiceUtil = ig.Class.extend({
        base_url : 'someurl',

        sendRequest: function(request)
        {
            var url = this.base_url + request;
            var requestVar = new XMLHttpRequest();
            dataGet = false;

            $.ajax({
                url: url,
                async: false,
                type: "get",
                success: function(data){
                    ServiceUtil.objDataReturned = data;
                }
            });
            return ServiceUtil.objDataReturned;                
        }
    })

그래서 그 주된 아이디어는 슬라이드에서는 추가하기만 비동기: 거짓값 때까지 기다린 후 모든 것을 할 수 있는 데이터 읽어들여집니다. 그런 다음, 모든 클래스의 정적 변수가 할당하십시오 마술로 작동됨:)

해설 (1)

Jquery 예제 문서 참조. http://api.jquery.com/jQuery.ajax/ (약 2/3 이 페이지)

다음과 같은 코드를 찾는 수 있습니다.

    $.ajax({
     url: 'ajax/test.html',
     success: function(data) {
     $('.result').html(data);
     alert('Load was performed.');
   }
});

동일한 페이지오로르 아래에있어.

해설 (0)