關於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