我的客户向我提供了一个返回json数据的webservice链接。我浏览了它并得到了一个好结果。但是当我创建一个简单的html页面并使用jquery ajax
时 var myCallback = function (data) {
alert("Data:" + data);
};
var url = "http://xxx/getToken";
var params = { username: "abc", password: "123" }
$.ajax({
type: "GET",
url: url,
data: params,
contentType: "text/plain",
dataType: 'jsonp',
crossDomain: true,
cache: false,
success: myCallback,
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
alert(XMLHttpRequest.responseText);
},
async: false
});
它总是返回错误“NetWorkError”,但是我跟踪了FIDDLE的结果,结果显示为浏览器???
当我将url更改为例如:
var url = "http://api.openweathermap.org/data/2.5/weather";
var params = { lat: "35", lon: "139" }
效果很好!....我不知道IIS配置或Jquery Ajax库到底是什么问题。
你有解决这个问题的解决方案吗?
感谢!!!
答案 0 :(得分:0)
问题在于你
A)使用JSONP,你应该使用JSON,
JSONP只是一种发送JSON数据的技术
B)异步被设置,所以你的broswer期望在它发送请求时的响应,
这应该等待回应。
所以试试这个
var myCallback = function (data) {
alert("Data:" + data);
};
var url = "http://xxx/getToken";
var params = { username: "abc", password: "123" }
$.ajax({
type: "GET",
url: url,
data: params,
contentType: "text/plain",
dataType: 'json',
crossDomain: true,
cache: false,
success: myCallback,
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
alert(XMLHttpRequest.responseText);
},
async: true
});
答案 1 :(得分:0)
最后,我找到了解决这个问题的解决方案。这里的主要问题是跨站点访问数据策略。我的客户的api服务不包括在内:
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: GET, POST
因此,浏览器不允许我的ajax请求获取json数据。手动,我必须打开(IE)互联网设置中的设置 - >其他 - >跨域访问数据源(设置为启用)以获取数据
结论,我们必须将这些添加到标题中以获得优先级,然后将浏览器设置添加到标题中