2012-04-17 1 views
0

JSON 교차 도메인 정책 문제로 인해 어려움에 처했습니다. 약간의 실험을 거친 후에이 코드를 작동시킬 수 있었지만 정확히 같은 코드 인 것처럼 보이는 두 개의 코드가있는 상황을 발견했습니다. 단 하나만 작동합니다. 이 매개 변수를 고려하지 않고, JSON은 jsonCallBack라는 함수 호출로 패딩 :두 개의 ajax 스크립트의 차이점은 무엇입니까?

내가 접근 오전 JSON이 파일은 간단 JSONP 것으로 보인다 여기

http://www.aph.com/files/partners/aphnonstopproducts/json/aphnonstopproductsjson.json

입니다. 유효한 JSON 인 것으로 보입니다.

여기이 JSON 데이터를 잡기 위해 사용하려고 코드의 첫 번째 세트는 다음과 같습니다

$.getJSON("http://www.aph.com/files/partners/aphnonstopproducts/json/aphnonstopproductsjson.json?callback=jsonCallback", function (data) { 
       //This will not alert 
       alert(data.APHNonStopProducts.Carpark[0].Airport.airportcode);    
      }); 

나의 이해는 그 데이터를하기 위해 함수 래퍼의 이름으로 callback=?를 대체 할 수있는 것이 었습니다 익명의 함수에 전달됩니다. 이 코드는 크롬 개발 도구에서 다음과 같은 오류를 보여줍니다

은 XMLHttpRequest http://www.aph.com/files/partners/aphnonstopproducts/json/aphnonstopproductsjson.json?callback=jsonCallback를로드 할 수 없습니다. 오리진 http://fiddle.jshell.net은 에 의해 액세스 제어 허용을 허용하지 않습니다.

aphnonstopproductsjson.json?callback=?로 URL을 떠나 (익명 하나는 아직 아니지만)

내 코드에서 이름이 지정된 함수 현재 다음 데이터가 제대로 검색되고이라고 명명 된 기능이있는 경우 있음을 주목할 필요가 여기에 작동하는 두 번째 코드입니다 :

$.ajax({ 
url: "http://www.aph.com/files/partners/aphnonstopproducts/json/aphnonstopproductsjson.json?callback=?", 
     dataType: 'json', 
     jsonp : "callback", 
     jsonpCallback: "jsonCallback", 
     success: function(data) { 
      //This alert will fire 
      alert(data.APHNonStopProducts.Carpark[0].Airport.airportcode); 
     } 
    }); 
});​ 

를이 호출에서 필자는 매개 변수 이름은 콜백을해야한다고 지정하고있어, 및 함수 이름은 jsonCallback해야한다. 따라서 본질적으로 첫 번째 코드와 동일하지 않습니까? 그렇다면 첫 번째 코드가 실패하는 이유는 무엇입니까?

여기에 코드의 두 조각을 참조하십시오 http://jsfiddle.net/3EXca/

+0

모든 브라우저에서 테스트 했습니까? 이 오류는 FireFox에서 발생한다고 생각합니다 –

+0

* 유효하지 않은 JSONP입니다. JSONP는 콜백 이름을 지정할 수 있습니다. –

+0

@bobek, 저는 주로 Chrome에서 테스트하고 있지만 Firefox에서도 오류가 발생합니다. –

답변

1

문제는 서버가 제대로 JSONP를 지원하지 않는다는 것입니다 (당신은 "ABZ가"라는 경고를 받아야한다). 콜백 매개 변수가 없으면 콜백이 없어야합니다. 대신, 이미 jsonCallback이 있습니다. 이를 무시할 수있는 방법이 있지만 매개 변수를 추측 할 수 없습니다.

$.getJSON이 JSONP와 작동하려면 서버가 JSONP를 콜백 매개 변수 이름과 함께 지원해야합니다.

jQuery가 함수 이름 jsonCallback을 사용해야하기 때문에 두 번째 방법이 효과적입니다. 어쨌든 항상 jsonCallback으로 감쌀 수 있기 때문에

jsonp: 'callback' 

은 중요하지 않습니다.

+0

답변 해 주신 Matthew에게 감사드립니다. 그러나 나는 여전히 코드 조각들 사이의 차이점을 혼동하고있다.왜 그 중 하나가 작동하고 다른 하나는 작동하지 않습니까? –

+0

jQuery는'jsonCallback'을 함수 이름으로 사용하지 않기 때문에 첫 번째 함수가 작동하지 않습니다. –

+0

확인해 주셔서 감사합니다. –

관련 문제