我尝试创建跨域测试以从不同页面获取数据。所有页面都使用相同的jsonp。
m1({"appNo":"7","user":"carol","uid":"id001"})
这是ajax函数: url_6是网址列表url_6 [a.jsp,b.jsp,c.jsp ....]
$('document').ready(function() {
$.each(url_6, function(index,appPage) {
$.ajax({
type: 'GET',
url: appPage,
dataType: "jsonp",
crossDomain: true,
cache:false,
jsonp:"callback",
jsonpCallback: 'm1',
success: function(data){
uid1=data.uid;
APPList1.push(new DataObj(title1,uid1));
},
error:function(jqXHR, textStatus, errorThrown){
alert(textStatus);
}
});
});
});
我有5个页面包含相同的jsonp,有时1,3,5个工作和2个,4个解析错误(但chrome控制台网络显示js文件成功返回200并且文件包含数据。 当我刷新页面时,1,2,3获得成功,4,5获得错误。
回调网址与https://www.otherdomains/xxx.jsp?callback=m1&_=1410160716447
我试图在ajax函数和jsonp中删除“m1”并改为使用“callback”,但所有请求都收到错误消息。
怎么回事?
Why do a random number of these JSONP requests fail?与我的问题非常相似,但我不确定......
这是在jsp:
中创建的jsonp<%@ page language="java" contentType="application/javascript; charset=UTF-8" pageEncoding="UTF-8" %>
String str = "{\"appNo\":\"" + "1" +
"\",\"user\":\"" + user +
"\",\"uid\":\"" + uid + "\"}";
String json = "ml(" + str + ")";
response.getWriter().write(json);
答案 0 :(得分:0)
最后,我发现了问题。
因为在ajax请求jsonp响应后,它会创建一个回调函数。就我而言,它叫'm1'。但是,因为我的所有jsonp响应都是:
m1({"appNo":"7","user":"carol","uid":"id001"})
因此,他们使用相同的回调函数是javascript。
我在请求中得到了200 OK,但在jsonp响应回来之后,m1函数正被另一个m1回调使用。所以,有些jsonp响应没有回调函数可供使用。
当我将jsp中的jsonp名称修改为m1,m2,m3 ....并且还在ajax函数中更改时,问题就消失了。
但是,我想尝试使用由ajax自动生成的回调函数....