1

我有两个单独运行的项目,一个是托管在 IIS 上的简单静态 HTML5 网站,我正在评估我在端口号90上的移动应用程序。

其次,我有一个为端口9000上的服务运行的网络服务器,它返回JSON数据(为此我使用 playframework2.0)。

在我的静态网站中,我有一个HTML5页面,其中包含对服务 url 的以下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 正确加载但响应为空白

4

1 回答 1

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 日志中。

您还可以使用 jsonp 调用$.ajax

$.ajax({
    url: 'http://localhost:9000/menu',
    dataType: "jsonp",
    jsonp : "callback",
    jsonpCallback: "jsonpcallback"
});

function jsonpcallback(data) { 
    alert('success' + data);
}

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

于 2012-08-20T13:30:17.300 回答