Как отправить кросс-домен и получить ответ
Я хотел бы установить форму, в которой я могу отправить некоторую информацию в другой междоменный домен и получить ответ обратно.
Допустим, у меня есть следующая таблица базы данных 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
будет в теле ответа
если он не работает на вашей машине, есть несколько причин, по которым я могу думать
$.ajax
часть имеет некоторые проблемы. Я только протестировал серверную часть, используя другой код клиента.- ваш сервер получил некоторые проблемы в работе базы данных.
- ваш код клиента не в
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.