使用JSONP来加载一个html页面
我试图使用JSONP
加载外部页面,但页面是一个HTML
页面,我只想要使用Ajax抓住它的内容。
编辑:我这样做的原因是因为我想通过所有的用户信息ex:头,ip,代理,加载页面时,而不是我的服务器。
这是可行的吗? 现在,我可以得到页面,但jsonp试图parsingjson,返回一个错误: Uncaught SyntaxError: Unexpected token <
示例代码:
$.post('http://example.com',function(data){ $('.results').html(data); },'jsonp');
我build立了一个jsfiddle供人们testing: http : //jsfiddle.net/8A63A/1/
http://en.wikipedia.org/wiki/JSONP#Script_element_injection
进行JSONP调用(换句话说,要使用这种使用模式)需要一个脚本元素。 因此,对于每个新的JSONP请求,浏览器必须添加(或重新使用)一个新的元素 – 换句话说,将元素注入到HTML DOM中,并为“src”属性添加所需的值。 然后评估此元素,检索src URL,并评估响应JSON。
现在看看你的错误:
未捕获的SyntaxError:意外的标记<
<
是任何html标签的第一个字符,可能这是<DOCTYPE
的开始,在这种情况下,这当然是无效的JavaScript。
而不,你不能使用JSONP来获取HTML数据。
我已经做了你想要的,但在我的情况下,我已经控制了返回HTML的服务器端代码。 所以,我所做的是将HTML代码封装在返回对象的Json属性之一中,并在客户端使用它,如下所示:
callback({"page": "<html>...</html>"})
你面对的语法错误是因为你使用的库期望JSON,但是响应是HTML,就是这样。
如果你真的只是想用客户端来拦截一个HTML文件,我build议使用flyJSONP – 它使用YQL ..或使用jankyPOST,它使用一些甜蜜的技术:
jankyPOST创build一个隐藏的iframe,并用表单填充(iframe [0] .contentWindow.document.body.form.name)。
然后它使用HTML5(观看传统的浏览器!)webMessaging API发布到其他iframe,并设置iframe的表单元素vals到你指定的。
提交表单到远程服务器…完成。
或者你可以使用PHPcurl,parsing它,回声,等等。
IDK,如果你正在使用它,但我希望这可以帮助。
另外…我敢肯定,你可以从服务器代码的JSONP输出任何东西。 我用ClientLogin做了这个,只是JSONPing他们的keyGen页面,并成功consoleLogging文本,即使它是B / W标签。 我还有一些其他的错误,但重点是我刮了输出。
目前,我试图做你自己,所以如果成功,我会回来。
我有三个字给你: 同源政策
除非远程URL实际上支持正确的JSONP请求,否则你将无法做你想做的事情。 这是一件好事。
编辑:您当然可以尝试通过您的服务器代理请求…
我不认为这是可能的。 JSONP要求响应呈现正确。
如果你想要另一个解决scheme,那么在iframe中加载url并尝试通过iframe进行交谈。 我不是百分之百的积极的工作,但它是值得一试。
首先,手动调用AJAX URL并查看生成的HTML是否合理。
其次,你需要在你的小提琴例子中closures你的DIV。