Запрос неверного файла JSON с использованием JSONP - PullRequest
0 голосов
/ 11 марта 2012

Я запрашиваю файл JSON с недопустимой структурой:

{}&&{
    "result": {
        "data": "01",
        "id": "02"
    }
}

Я не могу изменить JSON.Это на внешнем сервере.Firebug возвращает синтаксическую ошибку, указывающую на символы &&.

Что я должен сделать, чтобы получить этот недействительный JSON?

Мой скрипт:

<script src="jquery.js"></script>
<script type="text/javascript">
$(document).ready(function() {      
$.ajax({
url:"http://different-domain.com",
dataType: 'JSONP',
success: parseJSON
function parseJSON(data){
// do stuff with json
}
});
</script> 

Ответы [ 3 ]

2 голосов
/ 11 марта 2012

Префикс {}&& - это chaff, предназначенный именно для остановки любого, кто находится за пределами-domain.com доступа к данным.См. этот вопрос для справки.

Если вам нужен внешний интерфейс, чтобы вы могли взаимодействовать извне из той же политики происхождения, вам нужно будет заставить другого-domain.com изменить свой сценарийтак что он поддерживает интерфейс обратного вызова JSONP.

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

Вы можете использовать complete, а не success. Чем вы можете получить RAW ответ до появления ошибки. Затем вы можете удалить недопустимые символы, пока не получите анализ JSON:

$.ajax({
url:"http://different-domain.com",
dataType: 'JSONP',
complete: function(xhr){

    var raw= xhr.responseText
      , json
      , err
      ;

    while(raw.length && err)
    {
      // rewind state
      err= false;
      try {
        //parse JSON
        json= parseJSON(raw);
      }
      catch (e)
      {
        // Mark loop as invalid
        err= true;
      }

      // Get out if json is valid and parsed
      if (!err) break;

      // If loop is not broken try another one time: cut one char from invalid json and go on.
      raw= raw.substr(1);
    }

    if (!err)
    {
      console.log('YAPPPEEEEE :)');
    }
    else
    {
      console.log('NOPE :(');
    }
}
0 голосов
/ 11 марта 2012

Похоже, вы хотите удалить && и все, что стоит перед ним. Предполагая, что это всегда так, выполните в обработчике success метода $.ajax() следующее:

succes: function(data){
    var goodJSON = data.slice(4);
    var myObject = $.parseJSON(goodJSON);
}

myObject теперь будет содержать полностью проанализированный JSON.

...