在php中的textarea中呈现javascript

时间:2013-08-15 18:55:07

标签: php javascript

我有一个表格,textarea&一个按钮。 在按钮上单击我调用一个PHP函数。 从那里我调用服务来获取插入文本框中的值的数据。 功能代码是

function fire_btn(btnvalue) {
    if(btnvalue=="Create Widget") {
        var dataString =  $("form").serialize();
        receiveReq.open("GET", '<?php echo $this->config->item('url');?>getData/retriveData?&'+dataString);
        receiveReq.onreadystatechange = getdata; 
        receiveReq.send(null);
        document.getElementById('btnsave').value="Save Changes";
    }
}

function getdata() {
    if (receiveReq.readyState == 4 ) {
        document.getElementById('code').innerHTML = receiveReq.responseText;
        document.getElementById('codebox').focus();
    }
}

这里我的“代码”是我的div id&amp; Id“codebox”是我的textarea的d。

现在在php的retriveData数据函数中我正在做这个

$x = "<input type='hidden' value='".$this->db->insert_id()."' name='hdn' id='hdn' />";
        $x .= "<textarea id='codebox' readonly style='cursor:auto;min-width: 643px; min-height: 112px;max-width: 643px;max-height: 112px;margin-left:5px;'><!--Code Starts-->&lt;script type='text/javascript'&gt;";
        $x .= "wID= '".$this->db->insert_id()."';";
        $x .= "document.write('&lt;div id=myads".$this->db->insert_id()."&gt;&lt;/div&gt;');";

        $x .="document.write('&lt;scr'+'ipt type=";
        $x .='"text/JavaScript" src="'.$this->config->item('url').'allJs/myJs.js">';
        $x .=  "&lt;/scr'+'ipt&gt;');&lt;/script&gt;<!--Code Ends--></textarea>";
        echo $x;

myJs.js是

document.write('<link rel="stylesheet" type="text/css" href="style.css">');
document.write('<script type="text/javascript" src="http://myDomain.com/Create.js"></script>');

var myElement = document.getElementById('myads'+wID);
var JavaScriptCode = document.createElement("script");
JavaScriptCode.setAttribute('type', 'text/javascript');
JavaScriptCode.setAttribute("src", 'http://myDomain.com/content/'+wID);
document.getElementById('myads'+wID).appendChild(JavaScriptCode);

现在问题是textarea文本应该显示

<!--Code Starts--><div id='myads28'></div><script async type='text/JavaScript' charset='utf-8' src='http://myDomain.com/content/28'></script><!--Code Ends-->

当我在本地机器上测试时,这是正确显示的

但是当我在托管服务器上看到它时会显示类似的内容。

<!--Code Starts--><script type='text/javascript'> wID= '28';document.write('<div id=myads28></div>');document.write('<scr'+'ipt type="text/JavaScript" src="http://myDomain.com/Create.js"></scr'+'ipt>');</script><!--Code Ends-->

我无法理解发生了什么。

任何人都可以帮我解决。

2 个答案:

答案 0 :(得分:0)

您将javascript直接放入textarea,因此它会准确显示脚本的内容而不是执行它,有点像网站的记事本部分。如果您希望脚本写入页面,请将其放在textarea之外。您还可以使用PHP将div放在网站上,而不是让javascript做几个document.write(),从而释放客户端上的资源。

答案 1 :(得分:0)

只看你的变量$x,这是我的建议。

    $id = $this->db->insert_id();
    $rootURL = $this->config->item('url');
    $x = <<<EOD
<style>
    #codeBox {
        cursor: auto;
        min-width: 643px;
        min-height: 112px;
        max-width: 643px;
        max-height: 112px;
        margin-left: 5px;
    }
</style>
<input type="hidden" value="$id" name="hdn" id="hdn" />
<textarea id="codebox" readonly>
    <div id="myads{$id}"></div>
</textarea>
<script src="{$rootURL}allJs/myJs.js"</script>
EOD;
    echo $x;

id="myads{$id}上仔细检查我。您的代码会生成id="myads"1,而不是id="myads1",因为我相信您想要的。

我主要改进了样式,并将<script ...>移到<textarea>之外。

document.getElementById('codeBox').appendChild(JavaScriptCode);

myJs.js中,您将该元素作为子元素添加到<div id="myads">, 所以它看起来像是 <div id="myads"><script></script></div>,而不是 <div></div><script></script>

相反,我已将其更改为将元素添加到<div id="codebox">

我还建议,如果您正在对<div id="codebox">的内容进行硬编码,则使用下面的更改修改$x,因为您不需要Javascript来插入<script>

<textarea id="codebox" readonly>
    <div id="myads{$id}"></div>
    <script async type='text/JavaScript' charset='utf-8' src='http://myDomain.com/content/{$id}'></script>
</textarea>

如果您还有问题,请告诉我。