Javascript ajax():Can';t访问两个返回的json对象(jsonp)

Javascript ajax():Can';t访问两个返回的json对象(jsonp),javascript,json,jquery,jsonp,Javascript,Json,Jquery,Jsonp,如果这是一个重复的问题,我将很高兴地被重定向到一个答案:) 一些背景: 我有一个处理JSONP请求的小对象 直到最近,我还在使用纯JavaScript处理请求,就像这样 this.fetchJsonp = function(){ //the 'request' variable holds the URL and parameters for the request. var request = this.request; //creates a script

如果这是一个重复的问题,我将很高兴地被重定向到一个答案:)

一些背景:

我有一个处理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

                }

       });
我知道传递到“success”中的参数不会以与我的原始代码相同的方式工作,因为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

    };
web服务调用示例:

www.myservice.com/service?value=“something”&callback=jsonCallback

指的是JSONobject的作用域,因此它知道在哪里查找正在调用的函数。
call
变量与错误处理有关(我也找到了一个不使用jQuery的解决方案),但不在这个答案的范围之内


我希望这能帮助那些希望处理从web服务传递到应用程序中的多个JSON对象的人。

如何在服务器端脚本中发送两个JSON对象?!!?!为什么不在一个数组中发送两个对象?像这样:[{..},{..}]虽然您所做的是完全可能的,但由于某种原因,JSONP已经发展到这样一种程度:期望/假设(没有技术限制!)只向回调函数传递一个参数。因此,如果jQueryJustPlain不能处理这个问题,我不会感到惊讶(没有时间检查源代码);您可能需要考虑@ MeHeFiBar的方法来传递包含两个对象的单个数组,或者传递一个父对象,其中两个对象都是属性。这就是我自己所害怕的。我将不得不研究@Mohebifar的建议。谢谢你们的快速响应。我建议继续做你们已经在做的事情,jQuery无论如何都不能正确处理jsonp错误。从
$.ajax
文档中查找错误:“注意:跨域脚本和跨域JSONP请求不调用此处理程序。”@Kevin B:Hey here。我也一直在想这个。我在jQuery中使用ajax对象的原因是,尽管它不能跨域处理错误,“success”功能仍然会给我的代码一个提示,告诉我它是否已经收到了数据,或者不启动我自己的错误处理过程。我将尝试提出一个纯JS的替代方案。我相信PageMethods是ASP.NET独有的,我不使用它。不过,谢谢你的建议。
    window.jsonCallback = function(){

        //this function is executed if the script is successful
        that.call = true;
        that.processJSON(arguments);

    };