我正在尝试执行跨域POST请求并且已经打了一个墙(或两个)。
我无法在服务器上放置代理页面 - 因此这不是一个选项。
我研究了getJSON,除了我需要POST而不是GET之外,它工作得很好。
有可能这样做吗?如果不是,有人可以向我解释getJSON是如何工作的,以及为什么我不能做出替代方案。
答案 0 :(得分:26)
您CANNOT使用XMLHttpRequest(又名AJAX)发出跨域请求(GET / POST /等)。
当服务器支持时,您可以做的是发出JSONP请求。 JSONP请求的工作方式如下:
如果您无法控制要发布的服务器,那么您运气不佳,JSONP对您没有多大好处。无论服务器返回什么都将在SCRIPT标记中,并且如果格式不正确,很可能会抛出错误。
有关这方面的更多信息,我建议您查看基本的$ .ajax函数而不是快捷方式。 (在Ajax下的jQuery文档中。抱歉,我无法发布更多链接)
同样,如果您无法控制要发布的服务器,则可能需要查看代理。否则,IFRAME可能是您唯一的其他选择。还有一种方法可以使用SWF(flash)对象来实现此目的。我既没有尝试过,但它们是XMLHttpRequest对象限制的解决方法。
希望我能帮忙!
答案 1 :(得分:2)
你可以发帖,但你想要的是一个JSONP请求来解决跨域问题。本质上,您提供了一个回调函数,请求以脚本内容的形式返回,并使用请求中的JSON数据调用您的回调。您的服务器端脚本需要使用围绕JSON对象的回调函数将数据作为函数调用提供。
请参阅post功能的文档。
$.post( '/example.com/controller/action?callback=?',
{ param: "data" },
function(data) {
...do something with the data...
}, 'jsonp' );
ASP.NET MVC对此的操作:
[AcceptVerbs( HttpVerbs.Post )]
public ActionResult Action( string param, string callback )
{
var jsonData = ...do something and construct some data in JSON...
return Content( callback + "(" + jsonData + ");" );
}
答案 2 :(得分:0)
如果您想进行跨域POST,那么最简单的解决方案是Matteo提供的here解决方案。 它对我很有用