php echo JavaScript不会运行?

时间:2013-07-14 16:20:46

标签: php javascript html ajax

我遇到一个问题,当我使用AJAX将PHP从PHP页面回显到HTML页面时,它将无法运行,但是当我检查元素时,JavaScript也存在,我也会回显一些文本并且文本显示。< / p>

当我在HTML中手动添加JavaScript时,它可以完美地运行,并且PHP,HTML和AJAX文件都在同一个目录中,因此没有问题。

我有3页index.html,boo.php和ajax.js

的index.html

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="css/jquery.gritter.css" />
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">google.load('jquery', '1.7.1');</script>
<script type="text/javascript" src="js/jquery.gritter.js"></script>
<script src="ajax.js"></script>
</head>
<body>

<script type="text/javascript"><!--
refreshdiv();
// --></script>

<div id="timediv"></div>

</body>
</html>

boo.php

<?php

// Fetch the data

$query = "SELECT * FROM $tablename";
$result = mysql_query($query);

// Return the results, loop through them and echo

while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{

$name = $row['name']; // this equals Admin

if($name == 'Admin') {

echo $name; // this echos Admin and shows on index.html


// the javascript below doesnt
 echo "
<script type='text/javascript'>

    $(function(){



        $(document).ready( function () {

            var unique_id = $.gritter.add({
                title: 'title text',
                text: 'description text',

                image: 'icon.jpg',

                sticky: true,

                time: '',

                class_name: 'my-sticky-class'
            });



            return false;

        });


    });
</script>
";
}


}
?>

ajax.js

// Customise those settings

var seconds = 5;
var divid = "timediv";
var url = "boo.php";

////////////////////////////////
//
// Refreshing the DIV
//
////////////////////////////////

function refreshdiv(){

// The XMLHttpRequest object

var xmlHttp;
try{
xmlHttp=new XMLHttpRequest(); // Firefox, Opera 8.0+, Safari
}
catch (e){
try{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); // Internet Explorer
}
catch (e){
try{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e){
alert("Your browser does not support AJAX.");
return false;
}
}
}

// Timestamp for preventing IE caching the GET request

fetch_unix_timestamp = function()
{
return parseInt(new Date().getTime().toString().substring(0, 10))
}

var timestamp = fetch_unix_timestamp();
var nocacheurl = url+"?t="+timestamp;

// The code...

xmlHttp.onreadystatechange=function(){
if(xmlHttp.readyState==4){
document.getElementById(divid).innerHTML=xmlHttp.responseText;
setTimeout('refreshdiv()',seconds*1000);
}
}
xmlHttp.open("GET",nocacheurl,true);
xmlHttp.send(null);
}

// Start the refreshing process

var seconds;
window.onload = function startrefresh(){
setTimeout('refreshdiv()',seconds*1000);
}

如果数据库中有一个名为Admin的用户名,那么该脚本每5秒检查一次,如果有,则显示一个gritter通知。

任何想法我能做什么?感谢。

1 个答案:

答案 0 :(得分:3)

在第二个不起作用的echo语句中反转字符串表示法。 将双引号改为像这样的单个qoute

  echo "<script type='text/javascript'>
        ...more stuff... 
        title: 'title text',
        ...more stufff...
       ";

   echo '<script type="text/javascript">
         ...more stuff..
        title: "title text",
        ...more stuff...
        ';

为什么这样做是因为双引号将在字符串中查找变量而单引号则不会。所以当你有$(document)这个双引号时,php会认为它是一个var

编辑:因为echo语句正在运行

innerHTML方法的使用不评估它只评估html标签的脚本。 因此,如果您希望响应评估即将发生的echo语句,请使用jQuery函数append()

正在说改变

document.getElementById(divid).innerHTML=xmlHttp.responseText;

$('#divid').append(xmlHttp.responseText);