6

我想获取文件源并将其包装在JSONP中。

例如,我想从我不拥有的主机中检索pets.txt作为文本。我想通过只使用客户端 JavaScript 来做到这一点。

我正在寻找可以将任何内容转换为 JSONP 的在线服务。


YQL

雅虎查询语言就是其中之一。

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

"forbidden":"robots.txt 域不允许抓取 url: http://userscripts.org/scripts/source/62706.user.js "


所以我正在寻找另一种解决方案。

4

4 回答 4

5

我建立了 jsonpwrapper.com

它比 YQL 不稳定且慢,但它不关心 robots.txt。

于 2010-01-26T18:52:36.063 回答
2

这是另一个更快的,基于 DigitalOcean 和 CloudFlare,利用缓存等:http: //json2jsonp.com

于 2013-06-02T02:57:14.737 回答
0

不不不不。不,请;不。那不是 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 代码传递给一个应该评估字符串的函数(但它可能会也可能不会):

grab({"body": "alert(\"Hello!\");\n"});

看看所有那些分号和反斜杠!我从这种东西中得到噩梦。它就像一个写得很糟糕的 Lisp 宏,因为它比它需要(而且应该!)复杂得多。相反,定义一个grab在您的代码中调用的函数:

function grab(message) {
    alert(message.body);
}

然后使用 JSONP 让服务器返回:

grab({body: "Hello!"});

不要让服务器决定如何运行您的网页 相反,让您的网页决定如何运行网页并让服务器填写空白。

至于这样做的在线服务?我不知道,对不起

于 2010-01-26T19:27:41.147 回答
-2

我不确定你想在这里做什么,但没有人会使用这样的东西。没有人会相信您的服务始终按应有的方式执行并输出预期的 JavaScript 代码。你看到雅虎这样做是因为人们信任雅虎,但他们不会信任你。

于 2010-01-26T19:10:11.777 回答