关于JSONP请求以及它们不能同步生成的事实,存在很多问题。大多数解决方法都是使用回调函数,或者在ajax请求中使用成功函数来完成您想要的任务,但我认为这不适用于我。同步JSONP请求
背景:我正在使用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();
,然后做一些事情或其他与资源的结果。
鉴于我无法做一个同步的JSONP请求,并且我不能从ajax函数中返回,所以我无法弄清楚确保res在用户开始使用前完全填充。
感谢,
为什么你需要保护你的用户不必编写回调函数?如此多的Javascript需要了解如何异步执行操作,您只能屏蔽这些长久以来的新手...... – 2013-02-24 20:42:58
异步是具有传染性的。一旦控制流程的一部分使用回调,其他控制流程也会如此。恐怕没有办法解决这个问题。 Javascript的乐趣和恐怖之一。 – 2013-02-24 20:45:08
实际上有一个解决方法,但它需要编译步骤:https://npmjs.org/package/streamline – 2013-02-24 21:10:19