2011-08-19 22 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

相关问题