如果这是一个重复的问题,我将很乐意重定向到答案:)。
某些背景:
我有一个处理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对象而不是第二个JSON对象。我似乎无法找到一种方法来访问第二个对象(我也尝试'循环'通过对象,但无济于事:也许我做错了?)。
知道我这可能非常简单!任何帮助将不胜感激!
答案 0 :(得分:0)
为什么不在JavaScript中使用PageMethod调用并构造要发送回的值对列表?
答案 1 :(得分:0)
我设法找到了解决方案。感谢@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对象的人。