-1

我有一个表单,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();
    }
}

这里 Id “code” 是我的 div id & 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-->

我无法理解正在发生的事情。

任何人都可以帮我解决它。

4

2 回答 2

0

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

于 2013-08-15T19:07:11.387 回答
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<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>

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

于 2013-08-28T18:43:50.823 回答