2014-04-15 4 views
1

현재 JSONP를 사용하여 데이터를 받으려고합니다. 내가 https://ajax.googleapis.com/ajax/services/search/news?v=1.0&q=barack%20obama&callback=callbackForJsonpApi다트 JSONP 콜백 오류

을 쳤을 때 나는 완벽하게 정상적으로 응답을 얻을 :

callbackForJsonpApi({RESPONSE HERE})

하지만 https://api.forecast.io/forecast/APIKEYHERE/37.8267,-122.423?callback=callbackforJsonApi에 갈 때 내가 얻을 : 나는 "대해서 typeof 것을 왜

typeof callbackforJsonApi === 'function' && callbackforJsonApi({ RESPONSE HERE}) 

사람이 설명 할 수 "부분은 하나의 응답 앞에 붙이지 만 다른 하나는 응답하지 않습니다.

이 내 일부 HTML입니다
void main() { 

    // listen for the postMessage from the main page 
    window.onMessage.listen(dataReceived); 
    ScriptElement script = new Element.tag("script"); 
    script.src = "https://api.forecast.io/forecast/APIKEY/37.8267,-122.423?callback=callbackforJsonApi"; 
    document.body.children.add(script); 
} 

dataReceived(MessageEvent dataReceived) { 
    var data = JSON.parse(dataReceived.data); 
    print(data['responseData']); 
} 

:

내 site.dart 파일입니다

<html> 
    <body> 
     <script type="text/javascript"> 
      function callbackForJsonpApi(s) { 
      var data = JSON.stringify(s); 
      window.postMessage(data, '*'); 
      } 
    </body> 
</html> 
+0

다른 서버에서 다른 응답을받는 것 같습니다. 다르게 구성된 서버의 문제가 아닌가요? – lrn

+0

JavaScript 나 Dart와 관련된 문제는 아니지만 단순히 서버에서만 발생합니다. 후자는'callbackforJsonApi' 함수가 정의되지 않았다면 에러를 피하기 위해 콜을 지키고있는 것처럼 보입니다 - 그러면 예외를 던지기 만하면됩니다. 그것은 "비표준"입니다 (JSONP의 표준은 아니지만 전통적이지는 않습니다). JavaScript로 해석되는 경우 안전해야합니다. – lrn

+0

내 마지막에 나는 그들이 어떻게 처리 하는지를 변경하도록 요청할 수 있습니까? – Jonfor

답변

1

나는이 다른 이유를 설명 할 수 없다; 구글의 부분에 대한 약간의 감시 (아마도 그들은 동일해야한다)처럼 보인다.

둘 다 유효합니다. 하지만 여분의 수표가있는 것이 가장 좋습니다. 함수가 존재한다면 함수를 호출하는 것뿐입니다 (함수이기도합니다). 함수를 선언하지 않으면 JavaScript 오류가 발생합니다.

서버 측에서 이것을 당겨 코드를 페이지에 침투하는 경우; 당신은 아마 당신의 코드가이 두 가지를 용납하도록 노력해야한다; 미래에 다른 행동을 취하는 경우 (예 : Google이 일관성있게 작성한 경우)

관련 문제