Как отправить кросс-домен и получить ответ

Я хотел бы установить форму, в которой я могу отправить некоторую информацию в другой междоменный домен и получить ответ обратно.

Допустим, у меня есть следующая таблица базы данных info

Я хотел бы установить форму, в которой я могу отправить некоторую информацию в другой междоменный домен и получить ответ обратно.

Я много раз искал учебник, но у всех нет полного примера для изучения, поэтому этот пример мне очень поможет.

Допустим, я имею следующую информацию таблицы базы данных

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

Теперь HTML-страница index.html на www.site_1.com и эта форма будет отправлена ​​кросс-домен как name а также age в http://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;
?>

1 ответ

Ваш код работает, если ваш www.site_1.com является localhost, вы получите простой текстовый ответ 1 (если идентификатор равен 1). если у вас есть много данных для возврата, вы можете закодировать его как JSON, используя json_encode на сервере, и декодировать его с помощью JSON.parse в клиенте. с помощью echo отправить данные обратно в порядке. все, что вы echo будет в теле ответа

если он не работает на вашей машине, есть несколько причин, по которым я могу думать

  1. $.ajax часть имеет некоторые проблемы. Я только протестировал серверную часть, используя другой код клиента.
  2. ваш сервер получил некоторые проблемы в работе базы данных.
  3. ваш код клиента не в localhost домен, так что часть для set header, чтобы позволить 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.
Другие вопросы по тегам