当我尝试使用此代码查询我的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了。在企业环境中使用是否安全?
答案 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
试一试。
希望它会有所帮助。