簡體   English   中英

jQuery.ajax():無法訪問兩個返回的json對象(jsonp)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM