2013-07-14 56 views
-1

我有一個問題,當我使用AJAX從PHP頁面向HTML頁面回覆JavaScript時,它不會運行,但是當我檢查JavaScript的JavaScript元素時,我也會回顯一些文本並顯示文本。php echod JavaScript不會運行?

當我在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> 
"; 
} 


} 
?> 

阿賈克斯。 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

您是從一個AJAX調用呼應了JS ...和JS包裹在一個,但兩個文件準備好的功能。如果DOM完全加載,那麼這兩者都不需要,在AJAX調用完成時,您希望這將是呃... –

+2

爲什麼人們仍然在用jQuery這樣做Ajax?! – Songo

+1

此外,請檢查真正打印的內容(例如,添加輸出緩衝並在發送之前記錄輸出) - 別忘了,php的變量以美元符號開頭,並且回顯包含美元函數的jquery代碼。 。實際產量可能與您所期望的不同。 – poncha

回答

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內認爲它的一個變種

編輯:因爲echo語句正在

使用innerHTML方法不評估腳本只計算HTML標籤。 所以如果你想響應評估在未來echo語句使用jQuery函數append()

這樣說變化

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

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

感謝您的回覆,只是嘗試過,但不幸的是,同樣的事情發生。 – Koala

+0

@ user1626410如果你打電話給它,並希望它從ajax調用工作,當然它不會工作。 –

+0

不是每5秒只運行一次php代碼的Ajax代碼? – Koala