【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
如何通过JavaScript发送跨域POST请求?
注意-它不应该刷新页面,之后我需要抓取并解析响应。
#1楼
高级。...您需要在服务器上进行cname设置,以便other-serve.your-server.com指向other-server.com。
您的页面动态创建了一个不可见的iframe,它充当您到other-server.com的传输。 然后,您必须通过JS从您的页面与other-server.com进行通信,并具有将数据返回到您的页面的回调。
可能,但需要your-server.com和other-server.com的协调
#2楼
我知道这是一个老问题,但是我想分享我的方法。 我使用cURL作为代理,非常简单且一致。 创建一个名为Submit.php的php页面,并添加以下代码:
<?
function post($url, $data) {
$header = array("User-Agent: " . $_SERVER["HTTP_USER_AGENT"], "Content-Type: application/x-www-form-urlencoded");
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($curl);
curl_close($curl);
return $response;
}
$url = "your cross domain request here";
$data = $_SERVER["QUERY_STRING"];
echo(post($url, $data));
然后,在您的js(此处为jQuery)中:
$.ajax({
type: 'POST',
url: 'submit.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.');
}
});
#3楼
在http://taiyolab.com/mbtweet/scripts/twitterapi_call.js中检查post_method
函数-上述iframe方法的一个很好的例子。
#4楼
如果要在具有JQuery AJAX的ASP.net MVC环境中执行此操作,请按照下列步骤操作:(这是此线程提供的解决方案的摘要)
假设“ caller.com”(可以是任何网站)都需要发布到“ server.com”(一个ASP.net MVC应用程序)
在“ server.com”应用程序的Web.config上,添加以下部分:
<httpProtocol> <customHeaders> <add name="Access-Control-Allow-Origin" value="*" /> <add name="Access-Control-Allow-Headers" value="Content-Type" /> <add name="Access-Control-Allow-Methods" value="POST, GET, OPTIONS" /> </customHeaders> </httpProtocol>
在“ server.com”上,我们将对要发布到的控制器(称为“ Home”)执行以下操作:
[HttpPost] public JsonResult Save() { //Handle the post data... return Json( new { IsSuccess = true }); }
然后从“ caller.com”将数据(具有html id“ formId”)从表单发布到“ server.com”,如下所示:
$.ajax({ type: "POST", url: "http://www.server.com/home/save", dataType: 'json', crossDomain: true, data: $(formId).serialize(), success: function (jsonResult) { //do what ever with the reply }, error: function (jqXHR, textStatus) { //handle error } });
#5楼
创建两个隐藏的iframe(在CSS样式中添加“ display:none;”)。 使第二个iframe指向您自己域中的某个内容。
创建一个隐藏的表单,将其方法设置为target =您的第一个iframe进行“发布”,还可以选择将enctype设置为“ multipart / form-data”(我想您要进行POST,因为您想发送图片等分段数据?)
准备好后,将表单Submit()设为POST。
如果您可以让另一个域返回将与iframe进行跨域通信的JavaScript( http://softwareas.com/cross-domain-communication-with-iframes ),那么您很幸运,可以捕获响应也一样
当然,如果要将服务器用作代理,则可以避免所有这些情况。 只需将表单提交到您自己的服务器,该服务器会将请求代理到另一台服务器(假设未将另一台服务器设置为注意到IP差异),获取响应并返回您想要的任何内容。
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3155538