【问题标题】:$http.jsonp call from angular app returns errors来自 Angular 应用程序的 $http.jsonp 调用返回错误
【发布时间】:2016-10-28 19:24:09
【问题描述】:

下面是我创建的一个角度服务,用于通过 jsonp 从 Indeed 求职 api 返回搜索结果

(function() {
"use strict";

angular
    .module("career.resources")
    .factory("JobSearchService", ["$http", jobsearchService]);

    function jobsearchService($http) {
         return{
              getSearchResults: getSearchResults
         };

         function getSearchResults(publisherKey,keywords,location,jobType,limit) {
             return $http.jsonp("http://api.indeed.com/ads/apisearch?", {params: {
                "publisher": publisherKey,
                "v": "2",
                "format": "json",
                "callback": "JSON_CALLBACK",
                "q": keywords,
                "l": location,
                "sort": "",
                "radius": "",
                "st": "",
                "jt": jobType,
                "start": "0",
                "limit": limit,
                "fromage": "",
                "highlight": "1",
                "filter": "1",
                "userip": "1.2.3.4"
            }});
         }
     }
}());

当它执行时,它会抛出这个错误:

拒绝从 (url) 执行脚本,因为它的 MIME 类型 ('application/json') 不可执行,并且启用了严格的 MIME 类型检查

这个 jsonp 请求应该返回 application/javascript 对吗?我很困惑。

更新

我正在为这个 FYI 绞尽脑汁。任何帮助将不胜感激...

【问题讨论】:

  • 发送 JSONP 请求不会自行改变服务器的响应。服务器还必须发回一个有效的 JSONP 响应。您调用的 API 是否支持 JSONP?您可能想尝试将格式更改为 "format": "jsonp" 来尝试一下。
  • 使用application/javascript mime 类型
  • @leepowers 我不认为这个 API 接受 jsonp...我刚刚阅读了文档,它只提到了 xml 和 json。我尝试对 $http.get 做同样的事情,但我遇到了一个完全不同的问题here

标签: javascript angularjs json rest api


【解决方案1】:

在响应中外部设置content-type:application/javascript 标头。

严格的 MIME 类型检查只会在 chrome 中产生问题。但是,在 Firefox 中可以正常工作。

查看更多参考:

Chrome refuses to execute an AJAX script due to wrong MIME type

您可以轻松地在 Php、Java、Node js 等中设置响应头。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-28
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多