2016-06-23 4 views
0

Извините, если это действительно основной вопрос. Я работаю с JSONP в первый раз и пытаюсь написать некоторый JQuery для извлечения междоменных данных и извлечения из него некоторых элементов.Является ли это действительным ответчиком JSONP?

Если я печатаю в URL для службы я получаю следующий ответ

(function(){ 

    var data = { 
     status: 1, 
     content: {"name":"charliebrown", "resultCode":"0", "messageID":"1234"} 
    }; 

    try{ 
     ; 
    }catch(ex){} 
})(); 

Это терпит неудачу проверки достоверности, когда я проверить хорошо сформированный ответ JSON перед пытаться использовать что-то вроде jQuery.parseJSON ().

Должен ли я ожидать, что ответ будет чем-то вроде этого?

my_jsonp_callback (
    {"name":"charliebrown", "resultCode":"0", "messageID":"1234"} 
) 

Меня интересует только «составная часть» исходного ответа. Правильно ли я предполагаю, что я не могу получить действительный ответ JSONP с сервера?

+3

Если вы говорите, что первый блок кода - это то, что вы получаете с сервера, то нет, это определенно не JSONP. – Pointy

ответ

1

Предполагая, что блок try/catch пуст, потому что вы не поместили callback=something в URL-адрес, тогда ... «возможно».

JSONP не является четко определенным форматом. Второй кодовый блок в вашем вопросе показывает типичный ответ JSONP, но все JSONP действительно нужно сделать, это вызвать функцию и передать ей некоторые данные.

(Возвращаясь к типичному отклику, он может быть уязвим для Rosetta Flash. На самом деле это не проблема, когда Adobe зафиксировала это отверстие безопасности, но объясняет, почему типичный ответ JSONP может быть нежелательным)

Учитывая мое предположение, упомянутое в первом абзаце, вы получите something(data); вместо ; на третьем из нижней строки, который успешно выполнится как JSONP.

Если мое предположение неверно, то этот код ничего не делает, что делает его совершенно бессмысленным.

(Это делается для того, чтобы подчеркнуть тот факт, что JSONP - это JavaScript, и служба, которую вы запрашиваете, может запускать любой JS, который им нравится в ответе, что открывает вам проблемы с XSS. К счастью, сейчас у нас есть CORS, и это решает все проблемы, которые JSONP решает, но более чистыми и более гибкими способами).

Смежные вопросы