2012-11-25 49 views
3

我的解决方案包含两个asp.net MVC项目。一个将成为一个网络服务,另一个是一个普通的网站,从上述网络服务获取数据。从一个asp.net web应用程序发送JSON到另一个

我在我的网络服务到家控制器下面的方法:

... 
public JSONResult GetTeacher(){ 
    return JSON(new {TeacherName = this.teacher.name }); 
} 

我试图访问从其他Web应用这种方法(这将是该网站),利用此$就法:

$.ajax({ 
    type: 'GET', 
    url: 'localhost:11370/Home/GetTeacher', 
    contentType: 'application/json; charset=utf-8', 
    success: function (response) { 
     alert(JSON.stringify(response)); 
     $('#results').html('Welcome, ' + response.Name); 
    }, 
    error: function (error) { 
     alert(JSON.stringify(error)); 
    } 
}); 

当我开始调试我的解决方案它开辟了两个web开发服务器,同时在不同的端口。其结果是,当$就调用发生了,我得到一个弹出这个信息:

XMLHttpRequest cannot load http://localhost:11370/Home/GetTeacher. 
Origin http://localhost:11510 is not allowed by Access-Control-Allow-Origin. 

the page at localhost:11510 says: 
"readystate":0, "responsetext": "" , "status":0, "statustext":"error" 

当我尝试在谷歌浏览器的控制台,我得到了以下信息直接运行脚本

任何有关如何实际使用$ .ajax访问方法的帮助将不胜感激。

编辑:我也试着制作一个简单的html文件,看看如果我打电话给web服务会发生什么。同样的结果。另外,当我只输入方法的url时,它可以正常工作并显示教师的姓名。

回答

3

由于内置在浏览器中的same origin policy restriction,您无法发送跨域AJAX请求。一种可能的解决方法是使用CORS,但由于并非所有浏览器都支持,所以如果您需要跨浏览器解决方案,则可以考虑使用JSONP

您可以看看我写的this custom JsonpResult,以说明如何从不同的域中使用控制器操作。值得注意的是,jQuery的JSONP实现仅适用于GET请求。您无法将控制器操作发布到跨域。如果您需要这样做,唯一可靠的方法就是在主域上编写一个服务器端脚本,作为这两个域之间的桥梁。然后,您将发送AJAX请求到这个新脚本,该脚本会将请求委托给远程域并返回结果。

+1

感谢您的支持。我并不十分关心跨浏览器兼容性,因为结果将用于iOS应用程序。 – user1851327

+0

太棒了,那么你可以使用['CORS'](http://en.wikipedia.org/wiki/Cross-origin_resource_sharing)。只需在'GetTeacher'控制器操作中设置'Access-Control-Allow-Origin'响应头。 –

相关问题