关于 JSONP 请求以及它们不能同步发出的事实存在许多问题。大多数解决方法都涉及使用回调或 ajax 请求中的成功函数来执行您想要的操作,但我认为这对我不起作用。
背景:我正在使用Solr开发一个搜索应用程序。我正在开发一个 javascript API 供其他人用来与 Solr 交互,因此他们不需要了解 Solr 搜索请求的来龙去脉。
在我的 api 中,我有一个 Request 对象,带有一个名为 doRequest 的函数。该函数的目的是执行对 solr 服务器的调用(在另一个域上,因此需要 JSONP),并返回一个 Response 对象。
Request.prototype.doRequest = function (){
var res = new Response();
$.ajax({
url: this.baseURL,
data: 'q=*:*&start=0&rows=10&indent=on&wt=json',
success: function(data){
res.response = data.response;
res.responseHeader = data.responseHeader;
/*
other...
stuff...
*/
},
dataType: 'jsonp',
jsonp: 'json.wrf'
});
res.request = this;
return res;
};
“用户”会像这样使用这个功能......
var req = new Request();
var res = req.doRequest();
然后对 res 中的结果做某事或其他事情。
鉴于我无法执行同步 JSONP 请求,并且无法从 ajax 函数中返回,我无论如何也无法确保在用户开始使用 res 之前为他们完全填充它。
谢谢,