2017-01-11 2 views
0

Я следующий ответ:альтернатива использования Eval с ответом JSONP

someFunc({"attr":"val"}); 

Как извлечь JSON FRON это? Я мог удалить имя функции из строки и извлечь только JSON, но я думаю, что это не лучшее решение для JSONP. Я мог бы использовать eval для вызова функции someFunc, но опять же, eval - это плохо. Как мне это сделать?

+0

Безопасное (г) решение является аргументом case с разрешенными функциями –

+1

Как вы это оцениваете? Вы называете удаленный ресурс? Обычно вы определяете функцию 'someFunc' в вашем коде и затем передаете удаленный ресурс как атрибут' src' тега 'script', который вы бы динамически вводили в DOM. Тогда 'someFunc', который вы определили, будет автоматически вызван передачей в желаемом объекте в качестве параметра. –

ответ

2

Обычно эти типы входов поступают с удаленных конечных точек, которые будет вызывать ваше приложение javascript. Способ, которым этот удаленный вызов обычно выполняется, заключается в объявлении функции с ожидаемым именем, а затем динамическом вводе тега script в ваш DOM, указывающий его свойство src удаленному ресурсу. Когда ресурс будет загружен, он вызовет вашу функцию, передав ее как параметр желаемого объекта.

Приведем пример. Предположим, что у вас есть удаленная конечная точка, которая возвращает данные, указанные в вашем вопросе.

Начните с определения функции:

window.someFunc = function(result) { 
    // result will represent the {"attr":"val"} object 
    alert(JSON.stringify(result)); 
}; 

, а затем просто создать script элемент, который будет добавляться к вашему DOM и начать извлечение JSONP из удаленной конечной точки:

var s = document.createElement('script'); 
s.setAttribute('src', 'http://example.com/some_endpoint'); 
document.body.appendChild(s); 

После скрипт успешно загружает удаленный ресурс, он будет вызывать someFunc, который вы определили и передали ему объект результата.

Примечание: большинство конечных точек с поддержкой JSONP позволяют указать имя обратного вызова через некоторый параметр строки запроса: http://example.com/some_endpoint?callback=someFunc, чтобы вы знали заранее, как назвать свою функцию.

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