通过.NET的jQuery AJAX POST - JSONP返回

时间:2012-02-06 20:51:57

标签: jquery .net ajax post jsonp

我需要在另一个域上的.NET Web服务上发布ajax帖子。我可以将来自服务器的任何返回数据设置为jsonp并使用js来读取数据吗?我在发布到.NET服务时遇到过这个解决方案:

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调用中使用“script”作为我的dataType,并使用回调函数解析数据。成功的ajax功能。

是否可以在上面的调用中使用“script”作为dataType,或者我将如何进行此调用并仍然将返回的数据视为要在回调函数内读取的JSONP ?

3 个答案:

答案 0 :(得分:0)

使用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。

p.s。:显然我的代码片段是Python,但原理相同。

答案 1 :(得分:0)

返回数据的数据格式由服务器端的API决定。一些API提供jsonp格式。查找API文档。在进行呼叫的客户端(除非您拥有API),您无权访问它。

答案 2 :(得分:0)

JSONP不是AJAX。

AJAX使用浏览器的XHR接口发出单独的HTTP请求,其限制是XHR的目标与发起XHR的页面是同源的。

另一方面,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请求,然后“本地”返回结果。