我有一个表格,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--><script type='text/javascript'>";
$x .= "wID= '".$this->db->insert_id()."';";
$x .= "document.write('<div id=myads".$this->db->insert_id()."></div>');";
$x .="document.write('<scr'+'ipt type=";
$x .='"text/JavaScript" src="'.$this->config->item('url').'allJs/myJs.js">';
$x .= "</scr'+'ipt>');</script><!--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-->
我无法理解发生了什么。
任何人都可以帮我解决。
答案 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>
如果您还有问题,请告诉我。