通过.NET的jQuery AJAX POST - JSONP返回
我需要在另一个域上的.NET Web服务上创建一个Ajax帖子。我可以将来自服务器的任何返回数据设置为jsonp并使用js读取数据吗?我碰到过这种解决方案发布到.NET服务时:通过.NET的jQuery AJAX POST - JSONP返回
http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/
$.ajax({
type: "POST",
url: "PageName.aspx/MethodName",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
// Do something interesting here.
}
});
我用这个之前取得很大的成功,但是我的电话一直在同一个域中。现在我想发布跨域(甚至可能?),返回的数据可以在jsonp中以避免任何跨域问题。
通常当我做GET请求跨域让我们说的API,我通常使用“脚本”作为我在Ajax调用数据类型,且通过与成功的AJAX功能之外回调函数的数据解析。
是否有可能在上述呼叫使用“脚本”的数据类型或我将如何去进行此调用,仍然治疗返回的数据作为JSONP回调函数的内部看?
使用jsonp时,您需要提供一个回调名称作为url querystring参数。这是返回数据时将在客户端调用的函数的名称。在服务器端,你需要做这样的事情:
if request.GET.has_key('callback'):
callbackName=request.GET['callback']
str="%s(%s)"%(callbackName,str)
return HttpResponse(str, mimetype='application/javascript')
欲了解更多信息阅读http://api.jquery.com/jQuery.ajax/和搜索页面上JSONP。
页面:显然我的代码片段是Python,但它的原理是一样的。
返回数据的数据格式由服务器端的API决定。一些API提供了jsonp格式。查找API文档。在拨打电话的客户端(除非您拥有该API),您无权访问它。
JSONP不是AJAX。
AJAX使用浏览器的XHR接口在XHR的目标与启动XHR的页面相同的限制下创建单独的HTTP请求。
另一方面,JSONP是一个成为标准的黑客。 JSONP是相当于... <script src="http://api.yoursite.com/whatever/call.json?callback=asdf
如果返回的文件实际上只是一个JavaScript看起来像...... asdf({ ... json data ... });
这一切让这个非常重要的一点:
你无法进行跨域AJAX POST,也无法使用JSONP进行POST。为什么? JSONP只有GET,因为它基于<script>
标记。
为此,有一些规避技术,最简单的可能是本地代理方法,您在服务器上设置一个页面,将API请求发送到外部域服务器端,然后返回结果“本地” 。
您要呼叫的服务器也必须支持JSONP。是这样吗? – 2012-02-06 20:57:01
假设它。 – spez86 2012-02-06 21:03:54