javascript
  • jquery
  • json
  • 2011-12-15 3 views 0 likes 
    0

    여기서 무엇이 잘못되었는지 알 수 없습니다. 이

    [{1: "sdadd"}] 
    

    문제점 등

    $(function() { 
        $('#cars').change(function() { 
         var cars = $('#cars').val(); 
          $.getJSON('http://fooobar.com/data.php?id='+cars, function(data) { 
            alert('test'); 
         }); 
        }); 
    }); 
    

    요청 http://fooobar.com/data.php?id=3로 돌아 JSON 문자열은 코드

    alert('test'); 
    
    에게 있습니다

    는 요청이 올바른 JSON 문자열 반환 data.php 때 실행되지 않고 실행 데이터가 반환되지 않을 때

    내가 놓친 것?

    +3

    [동일 출처 정책] (https://en.wikipedia.org/wiki/Same_origin_policy)이 적용됩니다. 외부 도메인에서 JSON을 검색 할 수 없습니다. JSONP이어야합니다. –

    답변

    1

    나는 Same Origin Policy인데 다른 도메인에서 AJAX를 호출하는 웹 페이지를 중지합니다.

    +0

    올바르지 않습니다. 데이터는 여기에 반환되지만 JSONP 대신 JSON 형식이므로 콜백 함수가 호출되지 않습니다. – DhruvPathak

    +1

    그래서 그것은 동일한 원산지 정책이 될 것입니다. –

    3
    [{1: "sdadd"}] 
    

    은 올바른 JSON 문자열이 아닙니다. 개체에는 keys이라는 숫자를 사용할 수 없으며 이러한 키는 숫자로 시작할 수 없습니다. documentation에 따르면

    jQuery.getJSON(url [, data] [, success(data, textStatus, jqXHR)]) 
    

    : JSON 파일에 구문 오류가있는 경우 jQuery를 1.4로

    , 요청은 일반적으로 자동으로 실패합니다 jQuery를 당신의 success 콜백을 실행하지 않는 이유 때문이다

    내가 옳다 경우 확인이 시도 할 수

    :

    jQuery.getJSON(...).error(function() { alert("error"); }) 
    
    0

    잘못된 형식을 사용하여 상호 도메인 데이터 요청을 수행하고 있습니다. JSON이 아닌 JSONP 데이터를 반환해야합니다. JSONP가 작동하려면 , 당신의 URL :

    http://fooobar.com/data.php?id=3

    어떤 콜백 함수 이름으로 호출 할 때 일반적으로 { "result" : "some data" }

    를 반환 예 :

    http://fooobar.com/data.php?id=3&callback=myJavascriptFunction 은 반환해야합니다 : myJavascriptFunction({ "result" : "some data" }) 만 다음 JSON 데이터로 콜백 자바 스크립트 함수를 호출 할 수 있습니다.

    예 :

    I) JSON :

    https://graph.facebook.com/19292868552

    II) JSONP :

    https://graph.facebook.com/19292868552?callback=myFunctionName

    는 JSONP 포맷을 지원 한국어 API에 두 API 호출의 밖을 볼

    자세히 알아보기 : http://api.jquery.com/jQuery.getJSON/

    0

    다른 출처와 마찬가지로 동일한 출처 정책이 여기에 있습니다.

    그러나 여기 그들이 말하지 않았다 무엇 - 그것을 해결하는 방법 :

    $.ajax({ 
        url: "someurl.com", 
        dataType: "jsonp", 
        data: {'some key':'somevalue', 'someotherkey':'val'}, 
        success: function(response) { alert(response); }, 
        error: function(jqXHR, textStatus, errorThrown) { 
         //do some error handling 
         alert(jqXHR); 
         alert(textStatus); 
         alert(errorThrown); 
        } 
    }); 
    

    을 여기에 내가 $.ajax 방법을 사용하고 있습니다 - 기본적으로 $.getJSONdataType:'json'이에 대한 래퍼입니다.

    참고 : 이렇게하면 완전히 무작위 인 "콜백"이라는 매개 변수를 전달하도록 요청이 변경됩니다. 즉

    요청이 :

    someurl.com/?something=something&callback=123456 
    

    가 반환해야합니다 :이 서버에서 처리하고 함수 이름으로 다시 전달 될 필요가

    123456({ "key":"value"}); 
    

    그리고 는 당신이 얻을 수 있도록해야 반환 된 데이터는 정상적으로 처리됩니다.

    참조 : JSONP와에서 사용할 수있는 다양한 옵션 $ 아약스 여기에 꽤 좋은에 비트 : http://en.wikipedia.org/wiki/JSONP#Padding

    편집 : http://api.jquery.com/jQuery.ajax/

    위키 백과는 여기에 확실히 기사가 있습니다 : 이와 같은 요청을하고 오류 함수를 사용하면 콘솔이나 경고 상자에 오류를 던져서 반환 된 JSON이 유효한지 확인할 수 있습니다. 실패시 알림 상자를 표시하도록 수정 된 마크 업입니다.

    관련 문제