Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Ошибка при отправке данных на сервер


Автор: VasNN 24.7.2008, 10:25
Всем привет!

Я читаю книгу "ajax в действии". Там есть листинг с простой программой. 
Я скопировал оттуда код, запустил и обнаружил, что работает это только в IE и то не при всех параметрах. А FF выдает "Ошибка системы безопасности: содержимое «file:///D:/WIDGET/educate/index.html» не имеет права загружать данные из http://www.google.ru/." и "Ошибка: Access to restricted URI denied = NS_ERROR_DOM_BAD_URI
Источник: file:///D:/WIDGET/educate/index.html Строка: 20".
строка 20:  req.open(HttpMethod,url,true); 
В Opera работает частично.
Объясните, пожалуйста, что не так.
Код

<html>
  <head>
    <script type='text/javascript'>
      var req     = null;
      var console = null;
      
      var READY_STATE_UNINITIALIZED = 0;
      var READY_STATE_LOADING       = 1;
      var READY_STATE_LOADED        = 2;
      var READY_STATE_INTERACTIVE   = 3;
      var READY_STATE_COMPLETE      = 4;
      
      function sendRequest(url,params,HttpMethod){
        if(!HttpMethod){
          HttpMethod="GET";
        }
        req = initXMLHTTPRequest();
        if(req){
          req.onreadystatechange = onReadyState;
          req.open(HttpMethod,url,true);
          req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
          req.send(params);
        }
      }
      
      function initXMLHTTPRequest(){
        var xRequest = null;
        // Инициализация объекта запроса
        if (window.XMLHttpRequest){
          xRequest = new XMLHttpRequest();
        } else if (window.ActiveXObject){
          xRequest = new ActiveXObject("Microsoft.XMLHTTP");
        }
        return xRequest;
      }
      
      // Определение обработчика обратного вызова
      function onReadyState(){
        var ready = req.readyState;
        var data = null;
        // Проверка readyState
        if (ready == READY_STATE_COMPLETE){
          // Чтение данных ответа
          data = req.responseText;
        }else{
          data = "loading...["+ready+"]";
        }
        toConsole(data);
      }
      
      function toConsole(data){
        if (console != null){
          var newline = document.createElement("div");
          console.appendChild(newline);
          var txt = document.createTextNode(data);
          newline.appendChild(txt);
        }
      }
      window.onload = function(){
      console = document.getElementById('console');
      sendRequest("http://www.google.ru");
      }
    </script>
  </head>
  
  <body>
    
    <div id='console'></div>
  
  </body>
</html>


Автор: JSman 24.7.2008, 12:09
Ajax не работает с чужими доменами. В этой книге, насколько я помню, говорится, что вы можете пользоваться службами гугла через сервер, который генерирует xml/json файлы при запросе.

Автор: VasNN 24.7.2008, 16:15
А можно подробнее? Т.е. это получается, что я не могу послать запрос серверу, если код, который посылает запрос серверу, находится на локальной машине? Но ведь IE работает, он посылает запрос и принимает ответ - как это объясняется?

Автор: comtat 24.7.2008, 17:54
Цитата(VasNN @  24.7.2008,  16:15 Найти цитируемый пост)
Т.е. это получается, что я не могу послать запрос серверу, если код, который посылает запрос серверу, находится на локальной машине? 

можешь если запрос ты посылаешь на локальный сервер
Цитата(VasNN @  24.7.2008,  16:15 Найти цитируемый пост)
Но ведь IE работает, он посылает запрос и принимает ответ - как это объясняется?

сточки зрения безопасности это дыра

Автор: VasNN 25.7.2008, 09:34
Извините, что я по этой теме не секу, но объясните, пожалуйста, еще момент. 

1. Браузер отправляет запросы на сервер и принимает ответы. Почему XMLHttpRequest не может выполнить аналогичную функцию?

2. В Opera есть виджеты. Они используют там XMLHttpRequest и виджеты работают. Почему не работает XMLHttpRequest просто на страничке в составе скрипта(не виджет).

ps. меня интересует вопрос создания виджетов. Сейчас пытаюсь делать скрипты на обычной страничке, которые бы посылали запросы и получали ответы - не получается.

Автор: skyboy 25.7.2008, 11:35
Цитата(VasNN @  25.7.2008,  08:34 Найти цитируемый пост)
 Сейчас пытаюсь делать скрипты на обычной страничке, которые бы посылали запросы и получали ответы - не получается.

если говорить о firefox - там не виджеты, а плагины. с другим АПИ. я понимаю, что ты и так в курсе, но не понимаю, зачем отлаживать прототип виджет для оперы под файерфоксом?
вопрос ограничения - вопрос безопасности.
опасность безконтрольной отправки в том, что встроенный в страницу скрипт может "сливать" данные незаметно для пользователя. страница при этом не перегружается, индикатор не шевелится... то, что в ИЕ что-то потенциально опасное работает, говорит отнюдь не в пользу ИЕ.

Автор: comtat 25.7.2008, 21:52
вот еще почитай по теме http://xmlhttprequest.ru/#security

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)