2013-08-05 3 views
0

로컬 테스트 드라이브에서 다음 스크립트가 실행 중입니다. JSON 파일을 가져 와서 웹 페이지를 빌드하지만 어떤 이유로 데이터 처리시 오류가 있습니다. 데이터가 표시되지 않습니다 ...JSONP ajax 콜백 실패

하지만 하드 코딩 된 동일한 데이터를 사용할 때마다 원하는 결과가 나타납니다.

getGames: function(fn) { 
    $.ajax({ 
      type: "GET", 
      url: App.Config('webserviceurl')+'games-payed.js', 
      dataType: "jsonp", 
      success: function (data) { 
       console.log('streets', data); 
       if(fn){ 
        fn(data); 
       } 
      }, 
      error: function (msg) { 
       if(fn){ 
        fn({status:400}); 
       } 
      } 
    }); 
} 

그리고이 코드가 작동하지 않으며, 나는 점점 오전 : 그래서이 날이 내 AJAX 콜백입니다 ... 그것은 내가 JSON 가져 오기를 처리하는 방식과 함께 할 수있는 뭔가가

을 생각하게 내 콘솔에 오류 ...

내가 하드 코딩 된 데이터를로드, 그것은 완벽하게 작동합니다 :

getGames: function(fn) { 
    var games = App.Config('dummyGames'); 

    if(fn){ 
      fn(games); 
    } 
} 

내 AJAX 콜백에 문제가 있습니까?

편집 : JSON 파일은 다음과 같습니다 : 당신의 예에서

jsonp1({ 
    "status": "200", 
    "data": [ 
     { 
      "id": "1", 
      "title": "Title 1", 
      "publishDate": "2013-03-27T15:25:53.430Z", 
      "thumbnail": "images/thumbs/image_game1.png", 
      "html5": "http://mysite.com/index.html" 
     }, 
     { 
      "id": "2", 
      "title": "Title 2", 
      "publishDate": "2013-03-20T15:25:53.430Z", 
      "thumbnail": "images/thumbs/image_game2.png", 
      "html5": "http://mysite.com/index.html" 
     }, 
     { 
      "id": "3", 
      "title": "Title 3", 
      "publishDate": "2013-03-18T15:25:53.430Z", 
      "thumbnail": "images/thumbs/image_game3.png", 
      "html5": "http://mysite.com/index.html" 
     } 

    ] 
}); 
+0

오류 콜백에 로그인하면 콘솔에 아무것도 표시되지 않습니까? "게임 지불"오타가 무엇입니까? 브라우저의 네트워크 탭에서 무엇을 볼 수 있습니까? –

+0

'games-payed.js '가 어떻게 생겼는지 보여줄 수 있습니까? _payed_ 정보 : http://english.stackexchange.com/questions/92547/paid-vs-payed tldr; ** paid ** – Halcyon

+0

"유료"이름 지정에 관해서는 클라이언트에서 얻은 서비스이므로 명명에 대한 제어권이 없습니다. JSON 파일의 스 니펫을 추가했습니다. – Michiel

답변

2

, 당신이 jsonp1 내부에 JSON 데이터를 감싸는 것을 알 수있다. 고정 이름이라고 생각합니다. 그런 경우에는,이 시도 :

getGames: function(fn) { 
    $.ajax({ 
      type: "GET", 
      url: App.Config('webserviceurl')+'games-payed.js', 
      jsonp: false, 
      jsonpCallback:"jsonp1", 
      dataType: "jsonp", 
      success: function (data) { 
       console.log('streets', data); 
       if(fn){ 
        fn(data); 
       } 
      }, 
      error: function (msg) { 
       if(fn){ 
        fn({status:400}); 
       } 
      } 
    }); 
} 

주목하라 jsonpCallback:"jsonp1"jsonp: false. 그 이유는 기본적으로 jquery는 자동으로 무작위로 콜백 함수 이름을 생성하고 ?callback=generatedFunctionName을 URL 끝에 추가합니다. 콜백 매개 변수 덕택에 서버 측의 코드는 동일한 함수 이름을 사용하여 브라우저에서 콜백을 호출 할 수 있습니다. 귀하의 경우에는

, 당신은 고정 함수 이름 (jsonp1)를 사용하는, 그래서 당신은에 있습니다

  • 명시 적으로 추가에서 jQuery를 방지하기 위해 jsonp = false을 설정 jsonpCallback="jsonp1"
  • 를 사용하여 함수 이름을 지정합니다 "? 콜백"문자열을 URL에 사용하거나 "=?" 변환을 위해.