Ответ JSON от jQuery поднимает "Неверный ярлык" - PullRequest
1 голос
/ 13 июля 2010
       $.ajax({
  beforeSend: function(xhr) {
 xhr.setRequestHeader('Authorization', "Basic YWRtaW46YWRtaW4=");        
},
   url: "https://test.com/incident.do?JSON&callback=?&sysparm_action=getRecords",
   dataType: "json",
   contentType: "application/json",
   method: 'GET',
   success: function(a,b,c) { 
    alert(a);
         }          
 });

Я вызываю эту функцию нажатием кнопки ... Firebug показывает, что я получил этот ответ JSON (который, как я знаю, действителен) [усечено для ясности]

{
    "records": [
        {
            "service_offering": "",
            "number": "INC0000009"
        },
        {
            "service_offering": "",
            "number": "INC0000010"
        }
]
}

Firebug показывает ошибку "неверная метка https://test.com/incident.do?JSON&callback=jsonp1279049933243&sysparm_action=getRecords Линия 1

Как я могу это исправить? Спасибо!

Ответы [ 6 ]

2 голосов
/ 13 июля 2010

Ваш ответ - JSON, который действителен, но это не то, что ищет jQuery.Когда вы указываете &callback=? в URL, jQuery ожидает ответ JSONP, который выглядит иначе, ваш ответ должен быть

jsonp1279049933243({
  "records": [
    {
        "service_offering": "",
        "number": "INC0000009"
    },
    {
        "service_offering": "",
        "number": "INC0000010"
    }
  ]
});

Что происходит, когда вы указываете callback=?, чтоjQuery генерирует имя для вашей функции success, в данном случае jsonp1279049933243, JSONP работает просто путем генерации тега <script> на странице, поэтому, когда он выбирает этот URL-адрес, он на самом деле просто включает файл JavaScript и запускает функцию, но вместо этого:

<script type="text/javascript">
  jsonp1279049933243({ "records": [....] });
</script>

То, что сейчас эффективно происходит, это:

<script type="text/javascript">
  { "records": [....] }
</script>

... что не является допустимым JavaScript.Теперь, конечно, он загружается через src=https://test.com/incident.do?JSON&callback=jsonp1279049933243&sysparm_action=getRecords, но неверный синтаксис / ошибка метки тот же.

2 голосов
/ 13 июля 2010

Возможно, вы захотите убедиться, что служба поддерживает jsonp. Если нет, вам нужно настроить прокси на стороне сервера.

Использование jQuery для получения данных json возвращает неверную ошибку метки

0 голосов
/ 28 апреля 2011

Если вы используете 1.5.2 (и, возможно, более старые версии), вы можете отключить jsonp, если он вам не нужен или вам нужен.

Так что для всех вызовов ajax добавьте это где-нибудь на вашей странице:

$.ajaxSetup({
    jsonp: null,
    jsonpCallback: null
});

Или только для одного звонка добавьте:

jsonp: null,
jsonpCallback: null,

Итак, в вашем примере:

$.ajax({
    beforeSend: function(xhr) {
        xhr.setRequestHeader('Authorization', "Basic YWRtaW46YWRtaW4=");        
    },
    url: "https://test.com/incident.do?JSON&callback=?&sysparm_action=getRecords",
    dataType: "json",
    contentType: "application/json",
    method: 'GET',
    jsonp: null,
    jsonpCallback: null,
    success: function(a,b,c) { 
        alert(a);
    }          
});
0 голосов
/ 14 июля 2010

попытайтесь получить данные в виде простого текста и преобразовать их в json на стороне клиента.Для этого я использую сценарий «http://www.json.org/json2.js"». Это помогло мне решить проблему «недопустимая метка» в моем приложении. (Я упоминал сценарий, потому что функция eval () не помогла, понятия не имею, почему ...)

удачи:)

0 голосов
/ 13 июля 2010

Вы уверены, что JSON действителен?Проверьте это в JSONLint .

0 голосов
/ 13 июля 2010

Вы говорите, что знаете его действительность. Можете ли вы вложить его в функцию parseJSON и посмотреть, повезет ли вам с этим?

.

$ parseJSON (str_json);

Примечание. Вы не упомянули, какую версию jQuery вы используете. Этот метод доступен только в jQuery 1.4.1 и выше.

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