Javascript Dart JSONP回调错误

Javascript Dart JSONP回调错误,javascript,callback,dart,Javascript,Callback,Dart,我目前正在尝试使用JSONP接收数据。当我击中 我得到的回答非常好: callbackForJsonpApi({RESPONSE HERE}) 但当我去的时候,我得到: 有人能解释为什么我在一个回答前面加了“类型”部分,而在另一个回答前面没有 这是my site.dart文件: void main() { // listen for the postMessage from the main page window.onMessage.listen(dataReceived);

我目前正在尝试使用JSONP接收数据。当我击中

我得到的回答非常好:

callbackForJsonpApi({RESPONSE HERE})

但当我去的时候,我得到:

有人能解释为什么我在一个回答前面加了“类型”部分,而在另一个回答前面没有

这是my site.dart文件:

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']);
}
这是我的部分html:

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

函数callbackForJsonpApi(s){
var data=JSON.stringify;
window.postMessage(数据“*”);
}

我无法解释为什么它们不同;谷歌似乎有点疏忽(想必他们应该是一样的)

两者都是有效的;但是有额外支票的那张看起来最好;它只在函数存在(并且是函数)时才尝试调用该函数;如果尚未声明函数,将停止JavaScript错误


如果你在服务器端把它拉进来,然后把代码吐到你的页面上;您可能应该尝试让您的代码能够容忍这两种情况;以防万一你将来会有不同的行为(例如,如果谷歌让这些行为保持一致)。

看起来你从不同的服务器得到了不同的响应,那么这不只是服务器配置不同的问题吗?这听起来不像是JavaScript或Dart相关的问题,而是完全在服务器上。如果未定义
callbackforJsonApi
函数,则后者似乎在保护调用以避免出现错误,然后它将不执行任何操作,而不是抛出异常。这是“非标准的”(不是JSONP有一个标准,但它不是传统的),但如果解释为JavaScript,它应该是安全的。所以在我这方面,我只能要求他们改变如何处理它?基本上,是的,如果你需要他们改变格式的话。我不知道您是如何获取或使用响应的。如果响应是以JavaScript运行的,那么无论如何都应该可以。它不能作为两种格式的普通Dart代码运行(顶级函数调用不是有效的Dart)。如果您将文本作为字符串接收,然后在以后使用它,则可以在使用它之前切断字符串的第一部分。这完全取决于您试图做什么。我在代码示例中添加了。我试着做黑客解决方案,基本上把所有的东西都删掉到&&。我只是不确定在什么时候我能做到……有什么见解吗?
<html>
    <body>
        <script type="text/javascript">
          function callbackForJsonpApi(s) {
            var data = JSON.stringify(s);
            window.postMessage(data, '*');
          }
    </body>
</html>