2013-08-21 55 views
0

找不到任何工作的解決方案,以解決這個問題。JavaScript警告不工作在阿賈克斯加載的內容

我有一個PHP頁面的提醒,該頁面正在通過AJAX加載。警報不起作用。爲什麼?

<!DOCTYPE html> 
<html> 
    <head> 
     <script> 
      alert('test'); 
     </script> 
    </head> 

    <body> 
     <?php 
      $from = $_REQUEST['from']; 
      $to = $_REQUEST['to']; 
      $amount_per_day = 100; 

      $hoursDiff = (strtotime($to) - strtotime($from))/(60 * 60)/24; 

      $final_amount = $amount_per_day * ($hoursDiff + 1); 

      if($final_amount < 1900 && $final_amount > 0) { 
       echo $final_amount . ".00 GBP"; 
      } 
      else if($final_amount < 0) { 
       echo "Days cannot overlap"; 
      } 
      else { 
       echo '0.00 GBP'; 
      } 
     ?> 
    </body> 
</html> 
+0

你會得到任何js錯誤? –

+0

您是否嘗試過加載窗口加載?在window.onload =函數(){警報( '試驗')}; ? – codepixlabs

+1

「那個頁面正在被AJAX加載」究竟意味着什麼? – x29a

回答

0

假設一旦被阿賈克斯收到你寫這個標記的網頁時,<script>標籤將不會被JavaScript解釋器解析。

什麼,你需要做的是找到所有在響應中的腳本標記和eval()的內容,像這樣的:

var newContent = /* ajax response */; 
var dummy_el = document.createElement('div'); 

dummy_el.innerHTML = newContent; 

var scripts = dummy_el.getElementsByTagName('script'); 

for (var i = 0; i < scripts.length; i++) { 

    eval(scripts[ i ].innerHTML); 

} 

/* write newContent to page */ 
+0

適用於警報等內容。不能使用的功能:( – f2lollpll

1

以你的代碼到一個更簡單的版本:

<head> 
    <script> 
    alert('test'); 
    </script> 
</head> 

這被拉入和(我假設)追加到現有的內容,而不是直接在瀏覽器中運行。瀏覽器將適當地呈現所有標籤,但不會不幸地運行該內容中包含的任何腳本。

我注意到你在PHP中包含內容,所以可以肯定地說這個內容就是你想要返回的內容以及(如果無效)放入alert()。如果您使用的是jQuery的AJAX方法,則可以改爲使用.success()方法編寫代碼;作爲一個快速和骯髒的指針,你需要編寫類似代碼:

$.ajax (url, { 
    data: { from: $("#from").val(), to: $("#from").val() }, 
    success: function(data) { 
    if (!data.isValid) { 
     alert (data.message); 
    } else { 
     $("#amount").val(data.amount); 
    } 
    } 
); 

,然後讓PHP返回的結構,如:

<xml> 
    <isValid>true</isValid> 
    <message>My message here!</message> 
    <amount>60.00</amount> 
</xml> 
+0

我知道這是一箇舊帖子,但我見過人們推薦這麼做的所有方式,我不知道爲什麼每個人都不會這麼做!完美的工作 – Dave

0

如果你加載通過jQuery AJAX方法頁面不包括在頁面的輸出<html><head><body>標籤,所以PHP頁面如果您正在使用PHP只輸出

<script> 
    alert('test'); 
</script> 
<?php 
    $from = $_REQUEST['from']; 
    $to = $_REQUEST['to']; 
    $amount_per_day = 100; 

    $hoursDiff = (strtotime($to) - strtotime($from))/(60 * 60)/24; 

    $final_amount = $amount_per_day * ($hoursDiff + 1); 

    if($final_amount < 1900 && $final_amount > 0) { 
     echo $final_amount . ".00 GBP"; 
    } 
    else if($final_amount < 0) { 
     echo "Days cannot overlap"; 
    } 
    else { 
     echo '0.00 GBP'; 
    } 
?> 

通過AJAX並通過瀏覽器中的頁面,然後將AJAX輸出和HTML輸出放入if子句中,以便AJAX獲取基本代碼並且瀏覽器獲得完整的HTML。

<?php if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { ?> 
    <!-- basic ajax response --> 
<?php } else { ?> 
    <!-- full html response include <html><head><body> --> 
<?php } ?>