복붙노트

[JQUERY] jQuery를 아약스 (JSONP)는 타임 아웃을 무시하고 오류 이벤트가 발생하지 않습니다

JQUERY

jQuery를 아약스 (JSONP)는 타임 아웃을 무시하고 오류 이벤트가 발생하지 않습니다

해결법


  1. 1.jQuery를 1.5 이상에서는 JSONP 요청과 오류 처리에 대한 더 나은 지원이있다. 그러나, 당신은 대신에 $ .getJSON의 $ 아약스 방법을 사용해야합니다. 나를 위해,이 작품 :

    jQuery를 1.5 이상에서는 JSONP 요청과 오류 처리에 대한 더 나은 지원이있다. 그러나, 당신은 대신에 $ .getJSON의 $ 아약스 방법을 사용해야합니다. 나를 위해,이 작품 :

    var req = $.ajax({
        url : url,
        dataType : "jsonp",
        timeout : 10000
    });
    
    req.success(function() {
        console.log('Yes! Success!');
    });
    
    req.error(function() {
        console.log('Oh noes!');
    });
    

    10 초 후에 더 성공적인 요청이없는 경우 시간 초과는 오류 처리기를 트릭을하고 전화를 보인다.

    나뿐만 아니라이 주제에 대한 약간의 블로그 게시물을했다.


  2. 2.이 jQuery를 네이티브 JSONP의 구현 알려진 제한 사항입니다. 아래 텍스트를 IBM developerWorks에서입니다

    이 jQuery를 네이티브 JSONP의 구현 알려진 제한 사항입니다. 아래 텍스트를 IBM developerWorks에서입니다

    그러나 JSONP 플러그인을 사용할 수 GoogleCode에 오류 처리에 대한 지원을 제공합니다있다. 시작하려면, 당신의 코드를 다음과 같이 변경합니다.

    당신이 중 하나를 다운로드하거나 플러그인에 대한 스크립트 참조를 추가 할 수 있습니다.

    <script type="text/javascript" 
         src="http://jquery-jsonp.googlecode.com/files/jquery.jsonp-1.0.4.min.js">
    </script>
    

    아래와 같이 그런 다음 아약스 호출을 수정합니다 :

    $(function(){
        //var jsonFeed = "http://api.flickr.com/services/feeds/photos_public.gne"; // correct URL
        var jsonFeed = "http://api.flickr.com/services/feeds/photos_public.gne_______"; // this should throw a 404  
        $.jsonp({
            url: jsonFeed,
            data: { "lang" : "en-us",
                    "format" : "json",
                    "tags" : "sunset"
            },
            dataType: "jsonp",
            callbackParameter: "jsoncallback",
            timeout: 5000,
            success: function(data, status){
                $.each(data.items, function(i,item){
                    $("<img>").attr("src", (item.media.m).replace("_m.","_s."))
                              .attr("alt", item.title)
                              .appendTo("ul#flickr")
                              .wrap("<li><a href=\"" + item.link + "\"></a></li>");
                    if (i == 9) return false;
                });
            },
            error: function(XHR, textStatus, errorThrown){
                alert("ERREUR: " + textStatus);
                alert("ERREUR: " + errorThrown);
            }
        });
    });
    

  3. 3.해결책은 당신이 jQuery를 1.4로 붙어있는 경우 :

    해결책은 당신이 jQuery를 1.4로 붙어있는 경우 :

    var timeout = 10000;
    var id = setTimeout( errorCallback, timeout );
    $.ajax({
        dataType: 'jsonp',
        success: function() {
            clearTimeout(id);
            ...
        }
    });
    

  4. 4.이 JQuery와의 "공지"제한 할 수있다; 그러나, 잘 문서화하지 않는 것. 내 타임 아웃이 작동하지 않는 이유를 이해하려고 노력 오늘 4시간에 대해 보냈다.

    이 JQuery와의 "공지"제한 할 수있다; 그러나, 잘 문서화하지 않는 것. 내 타임 아웃이 작동하지 않는 이유를 이해하려고 노력 오늘 4시간에 대해 보냈다.

    나는 jquery.jsonp로 전환하고 그것은 매력을 좋아했다. 감사합니다.


  5. 5.jQuery를 1.5으로 해결 될 것으로 보인다. 나는 위의 코드를 시도하고 나는 콜백을 얻는다.

    jQuery를 1.5으로 해결 될 것으로 보인다. 나는 위의 코드를 시도하고 나는 콜백을 얻는다.

    나는 jQuery.ajax (대한 오류 콜백의 문서는) 여전히 다음과 같은 메모를 가지고 있기 때문에 "것 같다"라고 :


  6. 6.JQuery와는-JSONP jQuery를 플러그인 호세 바실의 대답에 언급 이제 GitHub의에서 찾을 수 있습니다.

    JQuery와는-JSONP jQuery를 플러그인 호세 바실의 대답에 언급 이제 GitHub의에서 찾을 수 있습니다.

    나는 간단한 예제를 제공 한 불행하게도 문서는 다소 스파르타이다 :

        $.jsonp({
            cache: false,
            url: "url",
            callbackParameter: "callback",
            data: { "key" : "value" },
            success: function (json, textStatus, xOptions) {
                // handle success - textStatus is "success"   
            },
            error: function (xOptions, textStatus) {
                // handle failure - textStatus is either "error" or "timeout"
            }
        });
    

    중대한 통화 $의 .jsonp의 callbackParameter 포함 () 그렇지 않으면 나는 콜백 함수 (JQuery와 - JSONP 버전 2.4.0 일 현재) 서비스 요청의 쿼리 문자열에 주입 결코 극복 것으로 나타났습니다.

    이 질문은 오래 알고 있지만, JSONP를 사용하여 오류 처리의 문제는 '해결'아직 없습니다. 이 질문은 맨 위 "JQuery와 JSONP 오류 처리"를 구글에서 그대로 희망이 업데이트는 다른 사람을 도움이 될 것입니다.


  7. 7.무엇 스크립트의의 OnError 이벤트를 수신 어떻습니까? 나는이 문제를 가지고 있었고, 스크립트 태그가 생성 된 jQuery의 방법을 패치하여 그것을 해결. 여기에 코드의 흥미로운 비트입니다 :

    무엇 스크립트의의 OnError 이벤트를 수신 어떻습니까? 나는이 문제를 가지고 있었고, 스크립트 태그가 생성 된 jQuery의 방법을 패치하여 그것을 해결. 여기에 코드의 흥미로운 비트입니다 :

    // Attach handlers for all browsers
    script.onload = script.onreadystatechange = function( _, isAbort ) {
    
        if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
    
            cleanup();
    
            // Callback if not abort
            if ( !isAbort ) {
                callback( 200, "success" );
            }
        }
    };
    
    /* ajax patch : */
    script.onerror = function(){
        cleanup();
    
        // Sends an inappropriate error, still better than nothing
        callback(404, "not found");
    };
    
    function cleanup(){
        // Handle memory leak in IE
        script.onload = script.onreadystatechange = null;
    
        // Remove the script
        if ( head && script.parentNode ) {
            head.removeChild( script );
        }
    
        // Dereference the script
        script = undefined;
    }
    

    이 솔루션에 대해 어떻게 생각하십니까? 그것은 가능성이 호환성 문제가 발생할 수 있나요?

  8. from https://stackoverflow.com/questions/1002367/jquery-ajax-jsonp-ignores-a-timeout-and-doesnt-fire-the-error-event by cc-by-sa and MIT license