Я хотел бы выбрать источник файла и перенести его в JSONP.
Например, я хочу получить pets.txt как текст от хоста, которым я не владею. Я хочу сделать это при помощи только клиентского JavaScript.
Я ищу онлайн-сервис, который может преобразовать что-либо в JSONP.
Язык запросов Yahoo является одним из них.
http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D"http://elv1s.ru/x/pets.txt"&format=json&callback=grab
Это работает, если URL не заблокирован robots.txt. YQL испытывают уважение к robots.txt. Я не могу выбрать http://userscripts.org/scripts/source/62706.user.js, потому что это заблокировалось с помощью robots.txt.
http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D"http://userscripts.org/scripts/source/62706.user.js"&format=json&callback=grab
"запрещенный": "robots.txt для домена запрещает проверку для URL: http://userscripts.org/scripts/source/62706.user.js"
Таким образом, я ищу другого решения.
Я построен jsonpwrapper.com .
Это нестабильно и медленнее, чем YQL, но он не заботится о ROBOTS.TXT.
Nononono. Это не JSONP, это javascript, который выполняет функцию с объектом в качестве параметра, который содержит больше javascript. Ааа!
Это JSON, потому что это только один объект:
{
'one': 1,
'two': 2,
'three':3
}
Это JSONP, потому что это только один объект, переданный через функцию; если вы перейдете на http://somesite/get_some_object?jsonp=grab
, сервер вернет:
grab({
'one': 1,
'two': 2,
'three':3
});
Это вовсе не JSON. Это просто Javascript:
alert("hello");
А это? Javascript-код, хранящийся внутри строки (ouch!) внутри объекта, переданного в функцию, которая должна оценить строку (но может быть, а может и нет):
grab({"body": "alert(\"Hello!\");\n"});
Посмотрите на все эти точки с запятой и обратные слеши! Мне снятся кошмары от таких вещей. Это как плохо написанный макрос Lisp, потому что он намного сложнее, чем должен (и должен!) быть. Вместо этого определите функцию grab
в вашем коде:
function grab(message) {
alert(message.body);
}
и затем используйте JSONP, чтобы сервер вернул:
grab({body: "Hello!"});
Не позволяйте серверу решать, как запускать вашу веб-страницу Вместо этого, позвольте вашей веб-странице решить, как запускать веб-страницу и просто попросите сервер заполнить пустые строки.
Что касается онлайн-службы, которая делает это? Я не знаю ни о какой, извините
.Я не уверен, что вы пытаетесь здесь сделать, но никто не будет использовать что-то подобное. Никто не собирается доверять вашим услугам, чтобы всегда выполнять, как следует и вывод ожидается, ожидаемый код JavaScript. Вы видите, что Yahoo делает это, потому что люди доверяют Yahoo, но они не доверяют вам.