Jquery: запуск AJAX локально без веб-сервера - PullRequest
13 голосов
/ 03 августа 2010

У меня есть следующая функция в файле .js в index.html

function getValues(){

 $.ajax({
   type: 'POST',
   url: "http://localhost/getData/getdata.php",
   success: function(data){
     var dataValues;
     var apnd;

     dataValues = String(data.NSE);
     apnd = "a";
     updateValues(dataValues, apnd);

     dataValues = String(data.BSE);
     apnd = "b";
     updateValues(dataValues, apnd);
    },
   dataType: "json"
 });

}

, это прекрасно работает, когда я запускаю ее на веб-сервере, например, wamp.Но я хочу запустить index.html локально, т.е. без веб-сервера. Пользователь просто дважды щелкает index.html, и он должен работать, но это не так.данные всегда нулевые.В чем может быть проблема?Извините, я супер JQuery Noob.

код в файле getdata.php

<?

echo json_encode(array("NSE"=>rand(5000, 20000),"BSE"=>rand(5000, 20000))); 

?>

Ответы [ 7 ]

17 голосов
/ 03 августа 2010

Когда вы запускаете ваш index.html из файла, AJAX работает.Но проблема возникает из-за того, что вы просматриваете файл по адресу "file: //....../index.html" и делаете AJAX-запрос к "http://localhost/..../something.php", который НЕ РАЗРЕШЕН из-за перекрестногосоздание сценариев сайта. Все запросы AJAX должны отправляться на один и тот же домен / сервер.

Предполагается, что вы просматриваете файл, дважды щелкнув по нему и продолжая отправлять запрос AJAX на веб-сервер.

7 голосов
/ 03 августа 2010

AJAX нужен веб-сервер для связи, чтобы он мог получать любые данные;в противном случае это просто разговор со стеной.Запуск сценария без веб-сервера - это все равно что пытаться сделать звонок без сотовой связи.: D

6 голосов
/ 03 августа 2010

Веб-сервер - это именно то, что обрабатывает все детали для вас.

Вы не можете POST без веб-сервера для публикации.HTTP = веб-протокол, поэтому вы не можете иметь HTTP-URL без целевого веб-сервера.

Веб-сервер также является процессом, который принимает ваш запрос на страницу PHP и запускает интерпретатор PHP, управляя входами и выходами.

Почему вы хотите запустить его локально?*

5 голосов
/ 03 августа 2010

Ajax не работает над протоколом file: //, как упоминалось другими. Возможно, вам нужно что-то вроде http://www.appcelerator.com/ для создания настольных приложений с помощью html / js / css

3 голосов
/ 27 сентября 2013

Я пощекотал себя, потому что, читая ответы людей о том, что вы не можете использовать AJAX «локально» без веб-сервера, я узнал, как вы можете это сделать.В JavaScript методы объекта XMLHttpRequest () в основном создаются браузером, и вам нужно не использовать методы, созданные веб-сервером (xmlhttp.status == 200).Следующие работы:

<script>
window.onload = function() {

    var input = document.getElementById("input");

    input.onclick = function() {
        var xmlhttp;
        xmlhttp = new XMLHttpRequest();
        xmlhttp.onreadystatechange = function() {
            if (xmlhttp.readyState == 4) {
                document.getElementById("response").innerHTML = xmlhttp.responseText;
            }
        }
        xmlhttp.open("GET", "response.html", true);
        xmlhttp.send();
    }
}
</script>
</head>

<body>
<h3>AJAX Request/Response</h3>
<p></p>
<input id="input" type="button" value="Call AJAX" />
<p></p>
<div id="response"></div>
3 голосов
/ 03 августа 2010

Вы не можете этого сделать, вы должны открыть свой HTML-файл также с адреса веб-сервера, например, http://localhost/yoursite/file.html или даже URL-адреса удаленного сервера. Вам нужно пройти через сервер / URL сервера.

2 голосов
/ 03 августа 2010

Считайте SOP . Доступ к данным из домена, отличного от текущего, заблокирован по соображениям безопасности.

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