【问题标题】:How to send cross-domain and get respond如何跨域发送并获得响应
【发布时间】:2015-06-02 21:21:29
【问题描述】:

我想设置表单,以便我可以将一些信息发送到另一个域跨域并获得响应。

假设我有以下数据库表info

我想设置表单,以便我可以将一些信息发送到另一个域跨域并获得响应。

我搜索了很多教程,但都没有完整的示例可供学习,所以这个示例对我有很大帮助。

假设我有以下数据库表信息

---------------------
| ID |  Name  | Age |
---------------------
| 12 |  Dave  | 18  |
---------------------
| 34 |  Eva   | 17  |
---------------------
| 31 | Carry  | 19  |
---------------------

现在www.site_1.com 上的 HTML 页面 index.html 和此表单将跨域发送 nameagehttp://www.site_2.com/data.php

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>

<form id="form" name="form" method="post">
<fieldset>
<label for="name">Name:</label>
<input class="text" id="name" name="name" size="20" type="text" />

<label for="name">Age:</label>
<input class="text" id="age" name="age" size="20" type="text" />

<input type="submit" value="submit" id="submit" name="submit"/>
</fieldset>
</form>

<script>
$( document ).ready(function() {

    $('form').submit(function(event){
        event.preventDefault();

        var name = $(this).find("#name").val();
        var age = $(this).find("#age").val();

        $.ajax({
            type: 'POST',
            crossdomain: true,
            //data: 'name=' + name + '&age=' + age,
            data: {name : name, age : age},
            url: 'http://www.site_2.com/data.php',
            success: function(data){
                if(data == 1){
                    alert("YES!");
                }else{
                    alert("NO");
                }
            },
            error: function(){
                alert('Error');
            }
        });
        return false;
    });
});
</script>

现在www.site_2.com这里是data.php的代码

<?PHP
// Suppose it already connected to DB

// for cross-domain
switch ($_SERVER['HTTP_ORIGIN']) {
    case 'http://localhost': case 'https://localhost':
    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;
}

// getting sent informations
$name = $_POST['name'];
$age = $_POST['age'];

// do some query
$a1 = "select id from info where name = '$name'";
$query = mysql_query($a1) or die(mysql_error());
$get = mysql_fetch_array($query);

// get the id
$id = $get['id'];

// i want it to send it back
echo $id;
?>

【问题讨论】:

    标签: php jquery ajax cross-domain


    【解决方案1】:

    如果你的www.site_1.comlocalhost,你的代码就可以工作。你会得到一个纯文本回复1(如果 id 是 1)。如果你有很多数据要返回 您可以在服务器中使用json_encode 将其编码为json,并在客户端使用JSON.parse 对其进行解码。使用echo 发回数据很好。您echo 的所有内容都将在响应正文中

    如果它不能在你的机器上工作,我可以考虑一些原因

    1. $.ajax 部分有问题。我只使用不同的客户端代码测试了服务器部分。
    2. 您的服务器在数据库操作中遇到了一些问题。
    3. 您的客户端代码不在localhost 域中,因此设置标头以允许CORS 的部分永远不会执行,您将在控制台中看到类似XMLHttpRequest cannot load http://www.site_2.com/info.php. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://www.site_1.com' is therefore not allowed access. 的错误

    【讨论】:

      猜你喜欢
      • 2015-07-20
      • 2011-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多