如何通过JavaScript发送跨域POST请求?
注意-它不应该刷新页面,之后我需要抓取并解析响应。
如果你控制要发布的服务器,只需在服务器上设置响应头即可利用“跨域资源共享标准”。此答案在该主题的其他答案中进行了讨论,但我认为不是很清楚。
简而言之,这里是如何完成从from.com/1.html到to.com/postHere.php的跨域POST(以PHP为例)。注意:你只需要设置Access-Control-Allow-OriginNON OPTIONS
请求-此示例始终为较小的代码段设置所有标头。
在postHere.php中,设置以下内容:
switch ($_SERVER['HTTP_ORIGIN']) {
case 'http://from.com': case 'https://from.com':
header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']);
header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
header('Access-Control-Max-Age: 1000');
header('Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With');
break;
}
这使你的脚本可以进行跨域的POST,GET和OPTIONS。当你继续阅读时,这将变得很清楚。
从JS设置跨域POST(jQuery示例):
$.ajax({
type: 'POST',
url: 'https://to.com/postHere.php',
crossDomain: true,
data: '{"some":"json"}',
dataType: 'json',
success: function(responseData, textStatus, jqXHR) {
var value = responseData.someKey;
},
error: function (responseData, textStatus, errorThrown) {
alert('POST failed.');
}
});
在步骤2中执行POST时,浏览器将向服务器发送“ OPTIONS”方法。这是浏览器的“嗅探器”,用于查看服务器是否在你发布时保持冷静。如果请求来自“ http://from.com ”或“ https://from.com ” ,服务器将以“ Access-Control-Allow-Origin”响应,告知浏览器可以执行POST | GET | ORIGIN 。由于服务器可以使用,因此浏览器将发出第二个请求(这次是POST)。好的做法是让你的客户端设置要发送的内容类型-因此你也需要允许它。
其中详细介绍了整个流程的工作方式。根据他们的文档,它应该“在支持跨站点XMLHttpRequest的浏览器中工作”。但是,这有点误导,因为我认为只有现代浏览器才允许跨域POST。我只用Safari,chrome,FF 3.6验证了此功能。
如果这样做,请记住以下几点:
问题内容: 我可以创建一个表单,然后使用它对任何站点发出POST请求,但FORM方法不是异步的,我需要知道页面何时完成加载。我尝试使用内置表单的iframe来解决这个问题,但没有成功。 有任何想法吗? 编辑 不幸的是,我无法控制响应数据,它从XML,json到简单文本不等。 问题答案: 您可以捕获的事件。将您的目标定位到iframe并监听加载。但是,您只能访问事件,而无法访问iframe的内容。
问题内容: 我正在使用PhoneGap和JavaScript来生成iPhone应用程序。是否可以发送跨域AJAX(POST)请求并将响应下载为HTML?(例如:登录yahoo邮件并提取新邮件) 问题答案: Cordova / PhoneGap允许将域列入白名单。只要您请求的服务器在白名单中即可。
问题内容: 似乎已经在stackoverflow上讨论过类似的内容,但是我找不到完全一样的东西。 我正在尝试发送带有CORS(跨源资源共享)的Cookie,但无法正常工作。 这是我的代码。 我在请求HEADER中看不到此Cookie。 问题答案: 您无法通过JavaScript在CORS请求上设置或读取Cookie。尽管CORS允许跨域请求,但cookie仍然受浏览器的同源策略约束,这意味着只有来
这是我的虚拟接口 和我的自定义配置 如果我像这样发送请求,我会看到我的请求发送了Content-Type:application/JSON;字符集=UTF-8。但是如果我设置了内容类型 我收到了这条错误消息。 如何发送POST请求,我认为我应该用编码器做更多的东西。感谢您的帮助。
我在网上找到了这个脚本: 但我不明白如何与PHP一起使用它,也不明白params变量内部的内容是什么,也不明白如何使用它。我能帮个忙吗?
任何指针都会有帮助,我试着玩contentTypes,但还是没有运气