如果這是一個重複的問題,我很抱歉。我已經完成了我的研究,但我仍然無法想出一個答案:JSONP回調不按順序
我在寫一個小的JSONP API。期望的結果:
程序員創建JSON類的實例。
var json = new jsonpRequest ( "http://url.to.web_service", searchParam //passed in as an associative array );
程序員然後宣佈
var myJSON = jsonpRequest.getJsonP()
這將返回JSONP入myJSON變量進行處理。
的API成功發生在當被構造的類的實例中的參數,生成鏈接到服務瓦特/所需的參數,並使用該函數它通過腳本標記注入到DOM:
jsonpRequest.prototype.fetchJsonp = function(){
var request = that.getRequest();
//creates a script element
var jsonpCall = document.createElement('script');
//gets jsonp request
jsonpCall.src = request;
//adds script to DOM, which goes on to request the JSONP from the service.
document.head.appendChild(jsonpCall);
};
編輯:爲了清楚起見:這肯定會返回請求的數據集。
我使用作爲我的回調函數是:
jsonpRequest.prototype.processCallback = function(data){
alert(data);
that.setListOfResults(data);
};
這就是所謂的鏈接爲:&callback=jsonpRequest.prototype.processCallback
的processCallback
功能採用數據從一個變量的請求,並將其存儲在課堂上使用setListOfResults
函數。
數據存儲完成後,我想將請求中的數據返回到myJSON
變量。這是getJsonp
功能,程序員在此過程中的步驟2調用:
jsonpRequest.prototype.getJsonp = function(){
that.buildRequest();
that.fetchJsonp();
return that.listOfResults;
};
問題:
這裏是我打電話後,我確定我的JSON API類:
var myJSON = json.getJsonp();
console.log(myJSON);
由於它是異步的,它在調用回調函數之前移動到控制檯日誌,導致MYJSON
爲undefined
。我不知道如何將我的代碼以這種方式連接起來,然後再繼續前進。
我試圖效仿How can I get this JSONP call to return a value?的解決方案。我可能會錯過一個步驟,或者我可能對某些事情一無所知!任何幫助澄清這將不勝感激。先謝謝你 :)。
P.S.我想避免使用JQuery等......將它嚴格保存爲原始JavaScript是有益的。
爲了查看'myJSON'的值,您必須等到服務器響應返回。嘗試使用'setTimeout'進行測試。您無法使用異步數據設置變量並立即預期結果。 – hitautodestruct
嘿有hitautodestruct,謝謝你的建議:)。我意識到'setTimeout'是一個可能的解決方案。這是一個非常有效的解決方案。但是,我不願意在http://stackoverflow.com/questions/17465011/how-can-i-get-this-jsonp-call-to-return-a-value中的Relfor點之後這樣做。不過,如果服務器沒有響應,我也許可以實現'setTimeout'作爲失敗保護。謝謝! – Mark
嘿,只是一個FYI的setTimeout不是一個好的解決方案,因爲你永遠不知道到底需要多少時間來服務器響應。我只是爲了測試目的而提出它。 – hitautodestruct