Как Firebug может проанализировать недопустимый ответ JSONP?

#javascript #ajax #jakarta-ee #jsonp #firebug

#javascript #ajax #джакарта-ee #jsonp #firebug

Вопрос:

Итак, я просто впервые пробую веб-сервисы Jersey Jax-rs, и я создал самый простой метод GET, который только можно себе представить.

Я также создал AJAX-функцию для вызова веб-службы. Теперь, если я установлю для dataType свойства значение json , я получу ожидаемую ошибку «междоменный», и это нормально.

Однако, когда я изменил его dataType на jsonp , я был удивлен, увидев, что Firebug смог проанализировать строку («Ответ от webservice»), которая была отправлена веб-службой, даже если она была неправильно отформатирована для JSONP, и показать ее на своей панели консоли.

Итак, если Firebug может проанализировать недопустимый JSONP (а я бы подумал, что он не должен быть способен), почему AJAX, похоже, не может его также проанализировать? Если я упорядочиваю данные, полученные вызовом AJAX, все, что я вижу, это,

 {"readyState":4,"status":200,"statusText":"success"}
  

Вот мой код для большего контекста.

Веб-сервис Джерси

 @GET
@Path("getJson")
@Produces("application/json")                     
public String getJson()
{
  return "Reply from Webservice";  
}
  

Javascript Ajax

 function accessWebService()
{

  var query = "http://localhost:8080/test_webservice/webresources/test/getJson";

  $.ajax
  ({
      type: 'GET',
      url: query,
      dataType: 'jsonp',        
      async: true,
      timeout: 10000,
      jsonpCallback: call,
      complete: function(data) 
      { 
        console.log(JSON.stringify(data));
      }
  });

}

function call(data)
{
  console.log("jsonp");
}
  

Вывод Firebug на консоль

 {"readyState":4,"status":200,"statusText":"success"}

SyntaxError: missing ; before statement
"Reply from Webservice"
  

Ответ №1:

Firebug обладает некоторыми специальными функциями для анализа (недопустимого) JSON. Посмотрите этот файл:

https://github.com/firebug/firebug/blob/1569514de44c0b75f5fb336691ab445663f0afca/extension/content/firebug/lib/json.js

Посмотрите на функции Json.parseJSONString и pseudoJsonToJson(json) там.

Комментарии:

1. Спасибо, Себастьян, я с нетерпением жду возможности взглянуть на это позже. Итак, по сути, можно ли это использовать для получения json через jsonp, даже если он неправильно отформатирован?

2. В принципе, да, хотя за дополнительной информацией вам лучше обратиться в дискуссионную группу Firebug . Саймон Линдхольм узнает об этом больше, когда он, наконец, коснется этого кода. Пожалуйста, обратите внимание, что код Firebug находится под лицензией BSD .

3. Да, безусловно, я бы не стал использовать код Firebug без разрешения. На самом деле меня больше интересует, что можно проанализировать (недопустимый) json, что заставит меня по-другому думать о jsonp в будущем. Спасибо за всю вашу помощь.