2011-08-19 2 views
0

나는 이와 같은 HTML 페이지의 끝에서 호출되는 스크립트를 가지고 있습니다.아약스는 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 스크립트에는 자바 스크립트를 작성하는 echo 문이 있습니다. echo 문은 문서에 인쇄되지 않습니다. 그들은 어딘가에 보내지고 있는데, 나는 어디 있는지 모른다. alert 함수를 사용하여 php에 대한 ajax 호출의 응답을 보면 모든 echo 문이 경고 상자에 인쇄되어 문서 자체에 인쇄 될 것으로 예상됩니다.

내 질문은 :

  • 아약스는 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

alert (response)를 사용하는 대신 document.getElementById ("IdOfDiv")와 같은 작업을 수행하십시오. innerHTML = response; –

+0

응답을 받고 있는지, 성공 블록에서 Hello world를 울리는 지 확인하십시오. – secretformula

+1

PHP에서하는 작업은 모두 PHP로 수행됩니다. 문서가 렌더링되고 반환됩니다. JavaScript (따라서 ajax)는 Echo가 일어났다는 사실을 알지 못하며 심지어 PHP 파일이기도합니다. 그것은 모릅니다. 그것은 상관하지 않습니다. 에코와 아약스는 특별히 로직을 추가하지 않으면 관련이 없습니다. – Incognito

답변

2

시크릿이 지적한 바와 같이, 당신의 아약스 통화가 PHP 함수가 무엇을하고 있는지에 대해 상관하지 않는다 -이 경우 중요한 모든 콘텐츠가 콘텐츠가 생성되지 방법, 서버에서 반환합니다.

시도 script의 응답 유형을 지정하고 문서 본문에 스크립트를 추가 할 append 또는 appendTo 기능을 사용하도록 아약스 호출에 dataType 옵션을 추가 : 또한

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

, 제안 :에서 귀하의 서버 측 함수, 마크 업을 생성하는 자바 스크립트 함수 대신 HTML 마크 업을 반향하지 않는 이유는 무엇입니까?

+0

'$ (document.body) .append (response);'가 작동합니다. 감사. – user823527

+0

제안 해 주셔서 감사합니다. 대신 HTML 마크 업을 보여 주며 코드는 훨씬 깨끗하고 효율적입니다. – user823527