如何通过JavaScript发送跨域POST请求?

流过昼夜 提交于 2020-01-09 21:02:35

【推荐】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应用程序)

  1. 在“ 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>
  2. 在“ server.com”上,我们将对要发布到的控制器(称为“ Home”)执行以下操作:

    [HttpPost] public JsonResult Save() { //Handle the post data... return Json( new { IsSuccess = true }); }
  3. 然后从“ 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楼

  1. 创建两个隐藏的iframe(在CSS样式中添加“ display:none;”)。 使第二个iframe指向您自己域中的某个内容。

  2. 创建一个隐藏的表单,将其方法设置为target =您的第一个iframe进行“发布”,还可以选择将enctype设置为“ multipart / form-data”(我想您要进行POST,因为您想发送图片等分段数据?)

  3. 准备好后,将表单Submit()设为POST。

  4. 如果您可以让另一个域返回将与iframe进行跨域通信的JavaScript( http://softwareas.com/cross-domain-communication-with-iframes ),那么您很幸运,可以捕获响应也一样

当然,如果要将服务器用作代理,则可以避免所有这些情况。 只需将表单提交到您自己的服务器,该服务器会将请求代理到另一台服务器(假设未将另一台服务器设置为注意到IP差异),获取响应并返回您想要的任何内容。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!