AJAX никогда не достигает успеха - PullRequest
0 голосов
/ 19 марта 2019

У меня есть GET API, который дает мне следующий результат:

enter image description here

Следующий код пытается получить эту информацию JSON:

<script>
   jQuery(document).ready(function ($)
   {       
      $.ajax({
         url: 'http://localhost:15840' + '/totem/GetRestaurants',
         type: "GET",
         dataType: "jsonp",
         crossDomain: true,
         complete: function (data)
         { 
            alert (data)
            for (var restaurant in data)
            {
               document.getElementById('restaurants').innerHTML = '<li class="gallery-image" > <a href="3.html" class="thumb"><img src="img/restaurante-02.jpg" alt="" /><div class="gallery-text"><span>FOOD RESTAURANT</span></div></a></li >'
             }   
          },
          error: function () {
             alert("error");
          }
       });
    });
</script>

Метод ошибки всегда выполняется, и полное оповещение просто отображает следующую информацию:

enter image description here

Но если я перехожу на ChromeИнспектор, ответ выглядит хорошо:

enter image description here

enter image description here

Почему это происходит?

РЕДАКТИРОВАТЬ:

С помощью следующего кода ничего не происходит:

<script>
    jQuery(document).ready(function ($)
    {       
        $.ajax({
            url: 'http://localhost:15840' + '/totem/GetRestaurants',
            type: "GET",
            dataType: "jsonp",
            crossDomain: true,
            success: function (data)
            {
                alert ("hello success")
            }
        });
    });
</script>

Ответы [ 2 ]

1 голос
/ 19 марта 2019

Вы сказали:

dataType: "jsonp",

… но скриншот ответа показывает, что JSON не JSONP.

Вам необходимо либо:

  1. Установите dataType на "json"
  2. Измените сервер для ответа с помощью JSONP (см. Что такое JSONP и почему он был создан? для получения дополнительной информации об этом).

Обратите внимание, что JSONP - это грязный и опасный хак, чтобы обойти единую политику происхождения, и что теперь у нас есть CORS (который является хорошо стандартизированным и гибким средством для выборочного отключенияТа же политика происхождения, которая не имеет недостатков JSONP).Так что не используйте вариант 2.


Возможно, вы пытались использовать dataType: "jsonp", потому что вы получили ошибку вроде:

XMLHttpRequest не может загрузить XXX Нет 'Access-Control-Allow-Origin 'header

Эта ошибка возникает из-за того, что вы нарушаете ту же Политику происхождения.JSONP - это один из способов обойти это, CORS - лучший.Оба этих способа требуют изменения server , чтобы они могли работать.

См. этот вопрос для получения дополнительной информации.

0 голосов
/ 19 марта 2019

Когда вы отправляете запрос jsonp, вам нужно изменить способ возврата данных. вам нужно обернуть ваш объект JSON в $ _GET ['callback']. если ваш бэкэнд был в php, вы можете попробовать следующий код

 $response['data'] = array('sdu');
 $response = json_encode($response);
 echo htmlspecialchars($_GET['callback']) . '(' . $response . ')';
 exit;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...