jQuery.ajax - Почему это не работает? - PullRequest
1 голос
/ 30 марта 2012

Я просто не могу заставить работать сервис ajax. Простой класс $.get("http://google.com") не работает. Также этот код тоже не работает:

<html>
    <head>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    </head>
    <body>
        <script>

        $.ajax({
            url:        "http://google.com",
            dataType:   "html",
            success:    function(data, status) {
                console.log("Success:");
                console.log("    Data: " + data);
                console.log("    Status: " + status);
            },
            error:      function(request, status, error) {
                console.log("Error:");
                console.log("    Request: " + request);
                console.log("    Status: " + status);
                console.log("    Error: " + error);
            },
        });

        </script>
    </body>
</html>

сохранено в test.html.

Это вывод на консоль:

Error:
    Request: [object Object]
    Status: error
    Error:

И это, я думаю, важные значения возвращаемого объекта:

readyState          0
responseText        ""
status              0
statusText          "error"

Почему запрос не работает? Спасибо,

Ответы [ 3 ]

3 голосов
/ 30 марта 2012

Вы не можете использовать AJAX для доступа к таким междоменным сценариям.Это из-за политики Same Origin * , которая была реализована в целях безопасности:

Этот механизм имеет особое значение для современных веб-приложений, которые в значительной степени зависят от файлов cookie HTTP.поддерживать аутентифицированные пользовательские сеансы, поскольку серверы действуют на основе информации cookie-файлов HTTP, чтобы раскрыть конфиденциальную информацию или предпринять действия, изменяющие состояние.На стороне клиента должно поддерживаться строгое разделение между контентом, предоставленным несвязанными сайтами, чтобы предотвратить потерю конфиденциальности или целостности данных.

Итак, у вас есть несколько вариантов:

  1. Просто вызовите сценарии на своем собственном сервере
  2. Вызовите сценарии на своем сервере, которые могут взаимодействовать со сторонними сайтами / приложениями / сценариями
  3. Используйте JSONP или XML в качестве формата обратного вызова.
1 голос
/ 30 марта 2012

Вы можете использовать JSONP для достижения междоменной связи.

http://en.wikipedia.org/wiki/JSON#JSONP

Но для простого html у вас будет один и тот же домен.

 $.ajax({
        url:        "http://google.com",
        dataType:   "jsonp",
        success:    function(data, status) {
            console.log("Success:");
            console.log("    Data: " + data);
            console.log("    Status: " + status);
        },
        error:      function(request, status, error) {
            console.log("Error:");
            console.log("    Request: " + request);
            console.log("    Status: " + status);
            console.log("    Error: " + error);
        },
    });

EDIT:

Но если ваш URL не вернет правильный отформатированный json, ваш запрос не будет выполнен. Для рабочего примера проверьте:

http://jsfiddle.net/S3tAR/1/

1 голос
/ 30 марта 2012

Вы не можете сделать запрос к другому домену из-за той же политики происхождения. См. http://api.jquery.com/jQuery.ajax/ для получения дополнительной информации.

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