【问题标题】:jQuery Ajax Post to php file on an other server is not workingjQuery Ajax Post 到其他服务器上的 php 文件不起作用
【发布时间】:2016-05-27 08:32:46
【问题描述】:

我正在编写一个工具,您可以在其中将我的 JavaScript 文件链接到您的网站,并且此 JavaScript 文件将 ajax 发布到我服务器上的 PHP 文件。

疯狂的是,当我将 JavaScript 文件链接到我的网络服务器上的页面时,它可以工作,但是当我将 JavaScript 文件链接到另一个网站(有另一个服务器)上时,它就不起作用了......这里代码:

phpwrite2.php:(应该在我的服务器上创建文件的文件)

<?php

if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
    header('Access-Control-Allow-Origin: *');
    header('Access-Control-Allow-Methods: POST');
    header('Access-Control-Allow-Headers: '.$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']);
    exit();
}

header('Access-Control-Allow-Origin: *');


$myFile = $_POST['filename'];
$myFile = "users/".$myFile;

chmod("users/",0777);

$fh = fopen($myFile, 'a') or die("can't open file");
$stringData = $_POST["name"];
fwrite($fh, $stringData."\n");
fclose($fh);
?>  

以及将 ajax 发布到 phpwrite2.php 文件的 jQuery:

function writeToFile() {
    
    $.ajax({
        type: 'POST',
        url: 'http://alexehgm.myhostpoint.ch/phpwrite2.php',
        crossDomain: true,
        data: '{"name":name, "filename" : filename}',
        dataType: 'txt',
        success: function(responseData, textStatus, jqXHR) {
            var value = responseData.someKey;
        },
        error: function (responseData, textStatus, errorThrown) {
            alert('POST failed.');
        }
    });

感谢您阅读我的问题,希望各位专业人士知道解决方案或找出问题所在。

【问题讨论】:

  • 您需要在服务器端发送CORS 标头才能不受限制。
  • @AndreasScheibleger 您好,感谢您的回复。您能否解释一下,这个 CORS 是什么以及 tp 如何使用它?谢谢

标签: javascript php jquery ajax server


【解决方案1】:

基本上,它归结为在 OPTIONS 请求(预检请求)上发送正确的 CORS 标头以及在后续请求中的标头:

if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
    header('Access-Control-Allow-Origin: *');
    header('Access-Control-Allow-Methods: POST');
    header('Access-Control-Allow-Headers: '.$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']);
    exit();
}

header('Access-Control-Allow-Origin: *');
// Your code here

解释:

  • Acess-Control-Allow-Origin:设置允许的域 访问此资源。
  • Acess-Control-Allow-Methods:设置允许访问资源的 HTTP 方法。
  • Access-Control-Allow-Headers:这些是允许的附加标头。您可以使用请求的标头来简单地允许所有请求。这不能是*

【讨论】:

  • 感谢您的回答!但不幸的是它仍然不起作用:(。这是我现在在 php 中的代码:查看编辑的问题
  • 您在浏览器的网络控制台中看到了什么?是否有任何关于受限访问的提示?
  • 似乎一切都没有问题
  • 您看到预检请求了吗?如果是,您是否得到正确的响应标头?根据您的网络控制台,您的实际请求的状态码和响应是什么?
  • @andread scheibleger 实际上,我在控制台中什么也看不到。您能否从 javascript 和 php 文件中向我发送一个完整的、理论上可以工作的代码? :D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-07
  • 2015-07-21
  • 1970-01-01
相关资源
最近更新 更多