Могу ли я использовать этот сценарий Ajax для обмена данными между клиентом и сервером? - PullRequest
0 голосов
/ 04 июня 2010

Этот блок кода предназначен для client.html (он находится по адресу www.client.com/client.html) - на стороне клиента.

У меня есть код ниже, который выглядит примерно так:

 ajaxRequest.open("GET", "http://www.server.com/ajax.php", true);

Так я называю файл ajax.php, расположенный на сервере. К сожалению, мне совсем не везет. Не удается подключиться к серверу, которому я звоню. Кстати, сайт ips / test, который я использовал, не имеет ограничений и доступен для всех.

Однако я попытался смоделировать, поместив client.html и ajax.php на одном сайте, и это работает хорошо.

Так что мой вопрос: работает ли этот скрипт, только если вы находитесь на том же сайте? или это работает также в сценарии клиент-сервер? Что еще я должен сделать, чтобы сделать эту работу?

// client.html

<script language="javascript" type="text/javascript">
<!-- 
//Browser Support Code
function ajaxFunction(){
    var ajaxRequest;  // The variable that makes Ajax possible!

    try{
        // Opera 8.0+, Firefox, Safari
        ajaxRequest = new XMLHttpRequest();
    } catch (e){
        // Internet Explorer Browsers
        try{
            ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try{
                ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e){
                // Something went wrong
                alert("Your browser broke!");
                return false;
            }
        }
    }
    // Create a function that will receive data sent from the server
    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4){
            document.myForm.time.value = ajaxRequest.responseText;
        }
    }
    ajaxRequest.open("GET", "http://www.server.com/ajax.php", true);
    ajaxRequest.send(null); 
}

//-->
</script>



<form name='myForm'>
Name: <input type='text' onChange="ajaxFunction();" name='username' /> <br />
Time: <input type='text' name='time' />
</form>
</body>
</html>

// ajax.php

 <?php

  echo date("H:i:s"); 

  ?>

1 Ответ

0 голосов
/ 26 февраля 2011

Браузер следует той же политике происхождения по соображениям безопасности. Таким образом, вы не сможете сделать запрос AJAX в другой домен.

Если у вас есть контроль над сервером, вы можете отправить специальные заголовки , которые разрешают междоменный AJAX. В противном случае я думаю, что вы должны найти другие методы.

Еще одна вещь, которую вы можете сделать, это добавить скрипт на свою страницу, источник которого находится на www.server.com. Затем в источнике вы можете передавать данные, например, назначая их новой переменной. Таким образом, вы не ограничены междоменными ограничениями, но сможете только выполнить запрос GET (не POST, PUT, DELETE ...). Кроме того, необходимо некоторое сотрудничество с сервера. В отличие от запросов AJAX, сервер не будет выплевывать ни одной страницы, но должен вывести действительный JavaScript.

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

someCallback({foo: 'bar', bar: 'foo'});

Этот метод называется JSONP, и вы можете найти более подробную информацию здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...