[英]jQuery.ajax(): Can't access two returned json objects (jsonp)
如果這是一個重復的問題,我很樂意將您重定向到答案:)。
一些背景:
我有一個處理JSONP請求的小對象。
直到最近,我還使用這樣的純JavaScript處理請求...
this.fetchJsonp = function(){
//the 'request' variable holds the URL and parameters for the request.
var request = this.request;
//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.getElementsByTagName('head')[0].appendChild(jsonpCall);
};
執行此代碼后,將調用回調函數,並將JSONP對象傳遞給它。 由於被調用服務的設置方式,該服務以這種格式向我發送了兩個JSONP對象:
callbackWrapperFunc({"arrayName":[{item1:"hello",item2:"world"}]}, {anotherImportantItem:"!"});
我可以這樣將這些對象傳遞給回調函數...
this.myCallBackFunction(firstObject, secondObject){
//manipulate data here
}
問題:
此后,我改變了方法,現在使用jQuery處理JSONP請求,因為它使我可以更輕松地處理錯誤。
//snippet of my jQuery ajax call:
jQuery.ajax({
url: this.request,
type: 'get',
dataType: 'jsonp',
success: function(firstObject, secondObject) {
//manipulate data here
}
});
我知道傳遞給“成功”的參數將無法以與原始代碼相同的方式工作,因為jQuery ajax對象將第二個和第三個參數作為textStatus返回(詳細說明調用是成功還是失敗)以及jqXHR對象。
使我可以訪問數據的第一個參數僅使我可以訪問第一個JSON對象,而不能訪問第二個。 我似乎找不到找到訪問第二個對象的方法(我也曾嘗試通過這些對象“循環”,但無濟於事:也許我做錯了嗎?)。
認識我可能真的很簡單! 任何幫助將不勝感激!
您為什么不只在JavaScript中使用PageMethod調用並構造一個值對列表以發送回去?
我設法提出了一個解決方案。 感謝@Matt的啟發。
跟上來...
確實,這確實看起來像是jQuery中的一個限制,並且已經指出,將一個JSON對象接受到回調函數中似乎是一種預期的規范。
如果您處於我的位置,並且想通過Web服務將一個或多個JSON對象接受到回調中,那么我已經開發了一個小解決方案:
我不再使用jQuery,而是使用從Web服務調用JSON對象的原始方式。
在我的JSON處理程序對象中,我編寫了一個自定義回調函數,該函數接受多個JSON對象並將它們處理為一個對象,以方便使用。
this.processJSON = function(){
//places any number of arguments (json objects) from the service into one JSON object.
var data = {};
for(var i = 0; i <= arguments.length; i++){
data[i] = arguments[i];
};
that.callback(data); //sends data to user designated callback
};
此函數僅讀取將多少個arguments
(在這種情況下為JSON對象)放入函數的arguments
數組中,並將它們全部處理為一個data
對象。
然后,您可以將其發送到任何您想去的地方。
請注意,調用此函數過程的回調函數必須是全局的,以便在正確的范圍內被識別。 例如,我通過將此函數放在JSON處理對象中來實現它:
window.jsonCallback = function(){
//this function is executed if the script is successful
that.call = true;
that.processJSON(arguments);
};
Web服務調用示例:
www.myservice.com/service?value="something"&callback=jsonCallback
that
指的JSONObject的范圍,因此它知道在哪里尋找正在調用的函數。 call
變量與錯誤處理有關(我也找到了沒有jQuery的解決方案),但不在此答案的范圍之內。
我希望這可以幫助希望處理從Web服務傳遞到其應用程序中的多個JSON對象的任何人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.