【问题标题】:Getting the Angular Typeahead to work with JSONP and JSON with properties让 Angular Typeahead 与 JSONP 和带有属性的 JSON 一起工作
【发布时间】:2014-06-30 23:02:43
【问题描述】:

我一直在努力让 $http.json() 正确返回对象的结果集。我在本地存储了相同响应的示例,它们工作正常。

谁能看看这段代码并告诉我我做错了什么?它与返回 $http 或那一点的东西有关。

演示:http://plnkr.co/edit/x325wZ4mwi9DNM8tAxgH?p=preview

【问题讨论】:

标签: angularjs angularjs-directive angularjs-scope angular-ui-bootstrap


【解决方案1】:

你似乎改变了你的笨拙。您使用 $http.jsonp 调用的第一个似乎很接近,但由于 COR 问题很难测试 - 您绝对应该检查 JSONP 返回数据的编码类型是否正确。不过……

我将按照下面的代码构建 $http.get。现在您已经放弃了 $http.jsonp 以支持 $http.get,还请注意,您现在可能需要通过 jsonDecode 将返回的 JSON 数据字符串显式解包到 javascript 对象中。最后,您可能必须解开服务器响应以仅返回没有 JSON_CALLBACK() 包装器的 json 有效负载。

  var url = 'http://sitesbyjoe.com/angular-tests/typeahead/schools.php?callback=JSON_CALLBACK'
  $http.get(url).success(function(data) {
      console.log(data);
      $scope.schools = angular.jsonDecode(data);
  });

【讨论】:

  • 你能把这段代码原样放在控制器中吗?
  • 我根据您的建议创建了一个新的 plunk,但我仍然遇到同样的问题。我还添加了一个标头以允许跨域请求。 plnkr.co/edit/eVRzgOOUuynXSZBM77W1?p=preview
  • OK - CORS 问题已解决。但是在您当前的 plnkr 中,AJAX 对数据的调用永远不会发生,因为学校被定义为函数而不是 $scope 上的属性。您可以将学校更改为属性(如我上面的代码示例中)或在您的 html 文件中,您可以将“学校中的东西”更改为“学校中的东西()”(所以这是一个 fn 调用)。更大的问题是,在您从服务器返回数据上设置正确的媒体/编码类型之前,它仍然无法工作:使用 text/javascript for JSONP
  • 仅供参考:让学校成为函数调用意味着对服务器的 AJAX 调用发生在文本框中的每次按键时。如果您计划在某个时候将输入的文本传递到服务器以使数据调用更精简,则需要 fn 方法。
猜你喜欢
  • 2013-06-30
  • 2014-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-28
  • 1970-01-01
  • 2016-03-01
  • 2019-02-10
相关资源
最近更新 更多