2011-08-19 21 views
0

我在這樣的html頁面的末尾調用了一個腳本。ajax對從javascript調用的php函數中的echo語句做了什麼?

<body> 

<script type="text/javascript"> 

$(document).ready(function() { 
       //define php info and make ajax call to recreate divs from XML data 
       $.ajax({ 
        url: "get_nodes.php", 
        type: "POST", 
        data: { }, 
        cache: false, 
        success: function (response) { 

         if (response != '') 
         { 
          alert(response); 

         } 
        } 
       }); 
}); 

</script> 

</body> 

該php腳本具有寫入javascript的echo語句。回聲語句不會打印在文檔中。他們被送到某個地方,我不知道在哪裏。如果我查看帶有alert函數的ajax調用php的響應,所有echo語句都會打印在警告框中,因爲我希望它們可以打印在文檔本身中。

我的問題是:

  • 什麼是AJAX與PHP的echo語句呢?
  • 將文檔打印在文檔中的方式是什麼?

這是通過ajax調用的PHP文件get_nodes.php。

<?php 

function get_nodes() { 
// load SimpleXML 
$nodes = new SimpleXMLElement('communities.xml', null, true); 

foreach($nodes as $node) // loop through 
{ 

     echo "\n<script type='text/javascript'>\n"; 

     echo " var newdiv = document.createElement('div');\n"; 
     echo " newdiv.id = '".$node['ID']."';\n"; 
     echo " newdiv.className ='comdiv ui-widget-content';\n"; 
     echo " newdiv.style.top = '".$node->TOP."'\n"; 
     echo " newdiv.style.left = '".$node->LEFT."';\n"; 
     echo " newdiv.style.width = '".$node->WIDTH."';\n"; 
     echo " newdiv.style.height = '".$node->HEIGHT."';\n"; 
     echo " $('#page').append(newdiv);\n"; 
     echo " var heading = document.createElement('p');\n"; 
     echo " heading.innerHTML = '".$node->NAME."';\n"; 
     echo " heading.className ='comhdr editableText ui-widget-header';\n"; 
     echo " $('#".$node['ID']."').append(heading);\n"; 
     echo " $('#".$node['ID']."').resizable();"; 
     echo " $('#".$node['ID']."').draggable();"; 
     echo " $('#".$node['ID']."').draggable('option', 'handle', '.comhdr');"; 

     printf('$("#%s").append("<a href=\\"#\\" onClick=\\"delete_div(\'%s\');\\">Delete</a>&nbsp;&nbsp;");', $node 

['ID'], $node['ID']); 

     printf('$("#%s").append("<a href=\\"#\\" onClick=\\"add_url(\'%s\');\\">Add URL</a>&nbsp;&nbsp;");', $node 

['ID'], $node['ID']); 

     echo "\n</script>\n"; 
} 

    return; 
} 

echo get_nodes(); 

?> 
+1

而不是使用警報(響應),做一些像document.getElementById(「IdOfDiv」)。innerHTML = response; –

+0

您確定您正在收到回覆,請嘗試在您的成功塊中回顯Hello world – secretformula

+1

您在PHP中執行的任何操作都是在PHP中完成的。該文件被渲染並返回。 JavaScript(也就是Ajax)並不知道Echo曾經發生過,或者這甚至是一個php文件。它不知道。它不關心。回聲和ajax是無關的,除非你專門添加邏輯。 – Incognito

回答

2

由於微服私訪指出的那樣,你的Ajax調用不關心你的PHP函數在做什麼 - 所有的,在這種情況下,重要的是內容從服務器返回的內容不是如何創建的。

嘗試添加dataType選項,您Ajax調用指定的script響應類型,然後使用appendappendTo功能的腳本添加到文檔正文:

$.ajax({ 
    url: "get_nodes.php", 
    type: "POST", 
    data: { }, 
    dataType: 'script', 
    cache: false, 
    success: function (response) { 
     if (response != '') 
     { 
      $(document.body).append(response); 
     } 
    } 
}); 

而且,一個建議:在你的服務器端函數,爲什麼不回聲HTML標記,而不是創建標記的JavaScript函數?

+0

'$(document.body).append(response);'工作。謝謝。 – user823527

+0

感謝您的建議。我使用HTML標記來代替,代碼更乾淨,更高效。 – user823527

相關問題