为什么我的angular-js jsonp请求在查询solr时不起作用

时间:2016-11-02 14:11:05

标签: javascript angularjs solr jsonp

当我尝试使用此代码查询我的solr服务器时:

var url ="http://localhost:8080/solr/sdc/selectwt=json&callback=JSON_CALLBACK&q=opioid"
$http.jsonp(url ).success(function(res){
    console.log(res)
})

我从控制台收到错误:

select?wt=json&callback=angular.callbacks._0&q=opioid:formatted:1
Uncaught SyntaxError: Unexpected token :

我可以看到我的回答,看起来像这样:

{"responseHeader":{"status":0,"QTime":0,"params":{"q":"opioid","callback":"angular.callbacks._0","wt":"json"}},"response":{"numFound":28,"start":0,"docs": ........

加上他们自己的所有文件。我尝试使用与其他用户示例不同的URL代码,代码可以运行。看起来它对Solr响应的格式不满意,特别是第一个:

我不知道我是否理解jsonp足以调试它。 Jsonp已经觉得有点hacky了。在企业环境中使用是否安全?

2 个答案:

答案 0 :(得分:0)

当我自己实现它时,我能够让它工作......不确定为什么提供的版本失败。

.factory( 'searchService', function ( $q ) {
    var search_service = {};

    search_service.search = function ( query ) {
        return $q(function(resolve, reject){
            var jsonpReq = document.createElement("script");

            /*Json callback, called from injected script tag*/
            loadResults = function (jsonResp) {
                resolve(jsonResp)
            };

            jsonpReq.src = 'http://localhost:8080/solr/sdc/select?wt=json&json.wrf=loadResults&q=' + query;
            jsonpReq.type = "text/javascript";
            document.body.appendChild(jsonpReq);
        })

    };

    return search_service;
} )

注意$q promisses要求您使用.then()代替.success()

答案 1 :(得分:0)

在您的网址中附加json.wrf = JSON_CALLBACK。这对我有用。

你的网址就像

http://localhost:8080/solr/sdc/selectwt=json&json.wrf=JSON_CALLBACK&q=opioid

试一试。

希望它会有所帮助。