我有两个单独运行的项目,一个是在IIS上托管的简单静态HTML5网站,我在端口号 90 上评估我的移动应用程序。
其次我有一个网络服务器在端口 9000 上运行服务,返回JSON
数据(我使用playframework2.0)。
在我的静态网站中,我有一个HTML5
页面,其中有ajax
次调用服务网址。
$("#homePg").on('pageinit', function(event) {
$.ajax({
type:'GET',
url : 'http://localhost:9000/menu',
success : function(response){
alert('success'+response);
},
error : function(xhr, status, error){
alert('error'+xhr.responseText);
}
});
});
每次进入错误函数,就像我在浏览器中尝试相同的URL一样,它工作正常。
使用Jquery 1.7.1
和jquery.mobile.1.1.1.js
已检查firebug,URL正确加载但响应为空
答案 0 :(得分:1)
使用javascript,将不同的端口视为跨域调用。你需要使用jsonp。
我使用jquery.jsonp库来执行此操作。
$.jsonp({
dataType: 'json',
url: 'http://localhost:9000/menu',
success: function (response) {
},
error: function (xhr, status, error) {
}
}); //end ajax
我想注意jsonp只能执行GET
个请求,所以如果你需要传递任何数据,它必须是查询字符串的一部分。如果您要提交具有合法后果的数据(例如信用卡数据),则必须关闭系统日志记录,以便卡号不会存储在IIS日志中。
您还可以使用$.ajax
进行jsonp调用。
$.ajax({
url: 'http://localhost:9000/menu',
dataType: "jsonp",
jsonp : "callback",
jsonpCallback: "jsonpcallback"
});
function jsonpcallback(data) {
alert('success' + data);
}
我从未使用过第二种方法,所以我甚至不确定这段代码是否有用。