jQuery : 동기식 AJAX 요청 수행


187

과거에 일부 jQuery를 수행했지만 완전히 붙어 있습니다. 동기 Ajax 호출 사용의 장단점에 대해 알고 있지만 여기에 필요합니다.

원격 페이지가로드되지만 (파이어 버그로 제어 됨) 리턴이 표시되지 않습니다.

함수가 올바르게 반환되도록하려면 어떻게해야합니까?

function getRemote() {

    var remote;

    $.ajax({
        type: "GET",
        url: remote_url,
        async: false,
        success : function(data) {
            remote = data;
        }
    });

    return remote;

}

코드가 잘 보입니다. 무엇을 반환하고 있습니까? js 오류가 있습니까?
ShankarSangoli

11
다소 역설적입니다. "동기식 JavaScript 및 XML"작업을 동기식으로 수행하는 방법을 묻습니다. 실제로 수행해야 할 것은 "SJAX"입니다.
VitalyB

3
참고 : 스펙 이 동기 AJAX 요청을 더 이상 사용하지 않습니다.
Léo Lam

2
"[동기]가 필요합니다"라는 문장은 JavaScript 엔진에 대한 이해가 부족하여 제대로 설계되지 않은 앱을 나타냅니다. 동기화가 실제로 필요한 경우가 있는지 알고 싶습니다.
pmont

15
@pmont seems that the statement "[synchronous] will be required" indicates a lack of understanding of JavaScript engines, thus a poorly architected app.또는 매우 잘 이해 : AJAX 호출을 수행하려면 onbeforeunload동기 요청을 사용하는 것이 실제로 권장되는 방법입니다 (요청이 다르게 반환되기 전에 브라우저 창이 사라지기 때문에). 어쨌든 그는 '동기식 아약스 호출 사용의 장단점에 대해 알고있다'고 분명히 말하고있다.
Stijn de Witt

답변:


298

동기식 요청을 할 때

function getRemote() {
    return $.ajax({
        type: "GET",
        url: remote_url,
        async: false
    }).responseText;
}

-http : //api.jquery.com/jQuery.ajax/#example-3

참고 : async 속성을 false로 설정하면 더 이상 사용되지 않으며 제거 중입니다 ( link ). 다음을 사용하면 Firefox 및 Chrome을 포함한 많은 브라우저가 이미 콘솔에 경고를 인쇄하기 시작했습니다.

크롬:

기본 스레드의 동기 XMLHttpRequest는 최종 사용자의 경험에 해로운 영향으로 사용되지 않습니다. 도움이 필요하면 https://xhr.spec.whatwg.org/를 확인 하십시오 .

Firefox :

기본 스레드의 동기 XMLHttpRequest는 최종 사용자의 경험에 해로운 영향으로 사용되지 않습니다. 도움이 더 필요하면 http://xhr.spec.whatwg.org/


16
참고 responseText항상 문자열을 반환합니다. 당신이 JSON을 기대하는 경우, 포장 $.ajax과 함께 JSON.parse.
usandfriends 친구 :

6
참고 : xhr.spec.whatwg.org/#the-open()-method 동시 요청은 더 이상 사용되지 않습니다 ...
teynon

5
@Tom <i><b>태그도 마찬가지 입니다. 내 권장 사항 : 이러한 기능을 계속 사용하여 사라지지 않도록하십시오.
Stijn de Witt

1
이렇게하면 브라우저가 잠기므로 옵션에 시간 초과 : 5000 정도를 추가하는 것이 좋습니다.
commonpike

1
개체에 대한 구문 분석 문자열을 @usandfriends 대신 JSON.parse의의 jQuery.parseJSON를 사용하는 것이 더 안전하다 stackoverflow.com/questions/10362277/...
안톤

33

아약스 기능을 잘못 사용하고 있습니다. 동기식이므로 다음과 같이 인라인으로 데이터를 반환합니다.

var remote = $.ajax({
    type: "GET",
    url: remote_url,
    async: false
}).responseText;

17

그 URL은 얼마나 원격입니까? 같은 도메인에서 왔습니까? 코드는 괜찮아 보인다

이 시도

$.ajaxSetup({async:false});
$.get(remote_url, function(data) { remote = data; });
// or
remote = $.get(remote_url).responseText;

네! 동일한 도메인과 모든 것. remote_url언급 된대로 (A Fire Fire로 제어) AJAX 호출이 올바르게 정의됩니다. 돌아 오지마!
Industrial

3
function getRemote() {
    return $.ajax({
        type: "GET",
        url: remote_url,
        async: false,
        success: function (result) {
            /* if result is a JSon object */
            if (result.valid)
                return true;
            else
                return false;
        }
    });
}

7
이것이 OP에 도움이되는 이유에 대한 설명을 포함하십시오.
krillgar

서버 측에서 json 객체를 반환하는 것이 좋습니다. 더 많은 제어 기능을 제공합니다. 그러나 위의 $ .ajax 매개 변수에 dataType : "json"을 추가해야합니다.
jjwdesign

이것이 의미하는 것은 : "더 많은 제어권을 제공합니다"?
grantwparks

3
관련이 없지만 다음을 수행 할 수 있습니다. return result.valid; // 이것은 이미 부울입니다
dpineda
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.