我们正在尝试避免iframe,而是使用基于javascript,jquery,jsonp和php的Web小部件来显示来自我们跨域html网站的内容。我们希望在窗口小部件中按原样显示整个页面,但是从我们阅读的所有教程中,提到我们需要提供JSON数据类型以便跨域JSONP工作。
这是我们尝试的内容 -
主要JS
function render() {
jQuery.getJSON(serverFQDN + '/widget.php?callback=?', {
install_url: window.location.href
}, serverResponse);
}
function serverResponse(data) {
jQuery(container).html(data.html);
}
Widget.php
<?php echo $_GET['callback'] ?>({
"html": "<?php echo 'hello'; ?>"
});
我们可以显示简单的html实体,如 -
<?php echo $_GET['callback'] ?>({"html": "<li>TEST</li>"
});
但不是整页,即
<?php
$url = "http://localhost/page.html";
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$output = curl_exec($curl);
curl_close($curl);
$output = json_encode($output);
echo $_GET['callback'] ?>({"html": "<?php echo $output; ?>"
});
答案 0 :(得分:0)
您应该使用cURL或Firebug进行检查,但我认为您对HTML进行了双JSON编码。
你也不清楚为什么写:
echo $_GET['callback'] ?>({"html": "<?php echo $output; ?>" });
而不是
echo $_GET['callback'] ?>({"html": $output });
编辑:没关系,我拥有它。你只是Javascript编码的JSON编码 - 但你有一组额外的引号!
如果$ output为"<li>TEST</li>"
,则您创建的文件为
jsonpCallback({"html" : ""<li>TEST</li>""});
呃,我想。就像我说的那样,使用cURL或Firebug来检查实际输出。