2011-10-11 4 views
1

페이지에 표시하려면 "잘못된 라벨"오류Mootools의 JSONP 잘못된는 라벨

Current.js (Mootools의)

new Request.JSONP({ 
     method: 'post', 
     url: 'https://somesite.com?needwhat=58b0e', 
     evalScripts:false, 
     evalResponse:false, 
     onSuccess:function(responseTree, responseElements, responseHTML, responseJavaScript) 
     { 
      $('#gallery').set('html',responseHTML); 
      eval(responseJavaScript); 
     } 
    }).send(); 

그리고 내가 무엇을 '에 끊었 지 계속 내 데이터를 가져 오는에 삼진 서버에서 검색하려고합니다.

{ 
    "id": "58b0e", 
    "items": [ 
    { 
     "title": "Some Title..." 
    } 
    ]} 
+0

언뜻보기에 JSON의 "제목"줄 끝의 쉼표는 없어야합니다. –

답변

2

오른쪽. 처음에는 JSONP에서 머리를 쓰는 것이 어려웠던 것을 기억합니다. 가능한 한 최선을 다해 설명하고 다른 사람들에게 도움이 될 수있는 방식으로 설명하려고 노력합니다 ...

오류를 이해하기 전에, mootools의 Request.JSON 클래스와 Request.JSONP 클래스의 근본적인 차이점을 고려해야합니다.

JSONP에서 제거되는 동일한 출처 정책의 약간의 차이점을 제외하고는 동일하다고 생각할 수도 있지만 모두 유사한 것은 아니며 그들이 공유하는 유일한 공통점은 둘 다 객체를 반환하고 동일한 것을 공유한다는 것입니다 namespace (Request.)

그 외의 다른 것은 없습니다. Request.JSONP는 동일한 원본 도메인/하위 도메인 및 프로토콜 내에서만 실행될 수있는 기본 XHR 클래스 (요청)를 확장합니다. 서버가 JSON 문자열을 반환 할 것으로 기대합니다. JSON 문자열은 구문 분석/평가하고 객체로 변환 할 수 있습니다.

전달 된 문자열은 전송 한 문자열과 비슷하거나 더 복잡합니다. 기본적인 것들.

여기서 XHR이 실패하면 다른 곳에서 데이터를 가져 오는 중입니다.. 다른 도메인에서 데이터를 가져올 수있는 유일한 방법 중 하나는 자바 스크립트를 사용하는 것입니다. 스크립트 소스의 출처에는 제한이 없습니다. 서버에서 클라이언트로의 JSONP 문제는 특정 데이터를 호출 수신자 함수 및 범위 (이 경우 Request.JSONP)로 다시 전달해야한다는 것입니다. 스크립트를 임베드하는 것만으로는 충분하지 않으며, 데이터를 전달해야합니다.

기본적으로 JSONP는 글로벌 범위 내에서 함수를 정의의 수단, 예에 의해 작동합니다

window.mycallback = function(data) { console.log(data); };

그 다음 일반적으로 '랩'mycallback라는 함수의 데이터, 뭔가 원격 종료를 요청 JSONP 서비스를위한 모든 API에서 자주 볼 수 있습니다.

삽입 된 스크립트는 (예를 들어)과 같습니다

http://api.twitter.com/1/users/show/shitmydadsays.json?callback=mycallback

무엇 트위터를 만듭니다

이 콘텐츠와 파일 :이 정말 무엇을

mycallback({"listed_count":56509,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/150162853\/desk-final.jpg","protected":false,"profile_link_color":"0084B4","name":"Justin","following":false,"followers_count":2743626,"id_str":"62581962","notifications":false,"utc_offset":-28800,"profile_background_color":"9AE4E8","description":"I'm 29. I live with my 74-year-old dad. He is awesome. I just write down shit that he says","default_profile_image":false,"statuses_count":144,"verified":false,"profile_background_tile":false,"profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/150162853\/desk-final.jpg","favourites_count":0,"location":"","show_all_inline_media":false,"contributors_enabled":false,"profile_sidebar_fill_color":"DDFFCC","screen_name":"shitmydadsays","status":{"retweeted":false,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"id_str":"114026815026249728","contributors":null,"in_reply_to_status_id":null,"favorited":false,"truncated":false,"source":"web","place":null,"geo":null,"retweet_count":"100+","in_reply_to_screen_name":null,"id":114026815026249728,"coordinates":null,"text":"\"Bullshit. Don't pretend you don't care about your birthday. It's like watching a hooker pretend she's out for a walk when cops drive by.\"","created_at":"Wed Sep 14 17:24:45 +0000 2011"},"is_translator":false,"url":"http:\/\/www.twitter.com\/justin_halpern","default_profile":false,"follow_request_sent":false,"time_zone":"Pacific Time (US & Canada)","friends_count":1,"profile_sidebar_border_color":"BDDCAD","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/362705903\/dad_normal.jpg","lang":"en","geo_enabled":false,"profile_use_background_image":true,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/362705903\/dad_normal.jpg","id":62581962,"created_at":"Mon Aug 03 18:20:34 +0000 2009","profile_text_color":"333333"}); 

, 여기에 데이터의 객체, 함수 myfunction에 대한 인수로 전달됩니다.

myfunction의 첫 번째 인수는 JSON 개체입니다.

Mootools Request.JSONP는 요청 매핑 등을 처리하지만 callback = 매개 변수로 작업하고 모든 데이터를 래핑하려면 원격 끝이 필요합니다. 지원하지 않는 경우 원격 서비스는 JSONP에 적합하지 않습니다.Request.JSONP를 사용하는 경우

은 위의 URL이 실제로는 자동으로 꺼집니다 :

http://api.twitter.com/1/users/show/shitmydadsays.json?callback=Request.JSONP.request_map.request_0

Request.JSONP.request_map 객체로 listener 기능을 매핑합니다,하지만 당신은 콜백을 덮어 쓸 수 있습니다

Mootools의 로컬 및 원격으로도 사용할 수 있습니다. 그냥이 코드를 실행하려고하면

당신이 오류가 동일합니다 자체에

{ 
    "foo": "bar" 
} 

을, 그것은 자바 스크립트 유효하지 그리고 SyntaxError: invalid label을 트리거합니다. 래퍼 func 가져 오기!