Jquery移动ajax调用不起作用(跨域)

时间:2012-08-20 11:42:38

标签: jquery jquery-mobile playframework-2.0

我有两个单独运行的项目,一个是在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.1jquery.mobile.1.1.1.js

已检查firebug,URL正确加载但响应为空

1 个答案:

答案 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);
}

我从未使用过第二种方法,所以我甚至不确定这段代码是否有用。

相关问题