我正在从事特殊项目,我几乎完成了它。我的问题是*sending parameter to iframe*
。
我的目标是创建像
这些是我的ajax代码:
$.ajax({
data: {html: html, css: css, js: js},
success: function(r) {
if(r) {
$("#preview").html(r.preview);
} else {
alert("error");
}
}
});
我的ajax.php
$html = $_POST["html"];
$css = $_POST["css"];
$js = $_POST["js"];
$r = array();
function d($html, $css, $js) {
$iframe .= '<iframe src="iframe.php">';
$iframe .= '</iframe>';
return $iframe;
}
$r["preview"] = d($html, $css, $js);
echo json_encode($r);
最后是我的iframe.php
function prev($html = "", $css = "", $js = "") {
$iframe .= '<html>';
$iframe .= '<head>';
$iframe .= '<style>' . $css . '</style>';
$iframe .= '<script>' . $js . '</script>';
$iframe .= '<script src="http://code.jquery.com/jquery-2.1.1.min.js" type="text/javascript"></script>';
$iframe .= '</head>';
$iframe .= '<body>';
$iframe .= $html;
$iframe .= '</body>';
$iframe .= '</html>';
return $iframe;
}
echo prev(); // which parameters I use?
它正在工作,但我没有发送来自textarea的参数?我没有关联ajax.php和iframe.php。
答案 0 :(得分:1)
我认为你误解了这里实际发生的事情。让我看看我是否可以解释当前正在发生的事情以及我认为你应该从这里开始的地方。
让我们将用户的页面请求视为与您的服务器的对话。这就是它的失败方式:
......那就是你被困的地方。所有HTML,CSS和JS都发送到ajax.php
,该页面并没有真正做任何事情。是的,它打印出一个iframe
标记,其源代码设置为iframe.php
,但该页面并不知道您为ajax.php
提供的所有内容。
在阅读了您发布的评论之后,如果我没有弄错的话,您似乎正在尝试模仿用户输入的代码预览器。有很多原因可以解释为什么像JSFiddle这样的网站会使用iframe
元素,其中一个原因是阻止用户的脚本到达其境界之外来操纵页面上的内容。如果您想实现这一点,您的代码结构需要更改。
首先,所有这一切发生的HTML页面应该已经在页面上显示了iframe
元素。尚未设置其src
目标。例如,像这样的东西就足够了:
<iframe id="preview"></iframe>
其次,我会使用一个目标设置为iframe
的表单。这允许您将他们键入的数据POST到PHP文件,然后基本上将该文件的输出发送到要加载的iframe
。一个非常简单的例子可能如下所示:
<form action="submit.php" method="post" target="preview">
<textarea name="html"></textarea>
<textarea name="css"></textarea>
<textarea name="js"></textarea>
<input type="submit" value="Run!" />
</form>
<强> submit.php:强>
$html = $_POST['html'];
$css = $_POST['css'];
$js = $_POST['js'];
// Using your code from before...
function prev($html = "", $css = "", $js = "") {
$iframe = '<html>';
$iframe .= '<head>';
$iframe .= '<style>' . $css . '</style>';
$iframe .= '<script>' . $js . '</script>';
$iframe .= '<script src="http://code.jquery.com/jquery-2.1.1.min.js" type="text/javascript"></script>';
$iframe .= '</head>';
$iframe .= '<body>';
$iframe .= $html;
$iframe .= '</body>';
$iframe .= '</html>';
return $iframe;
}
echo prev($html, $css, $js);
警告:这是未经测试的代码。