2014-01-18 2 views
-2

서버 측 파일에서 XML 데이터를 가져 와서 서버 측 스크립트 (예 : PHP가 없음)를 사용하지 않고 성공적으로 액세스했습니다.(서버 측 스크립트를 사용하지 않고) jQuery를 사용하여 아파치 서버의 XML 파일에 쓰기

다시 서버 측 스크립트 (예 : PHP가 없음)를 사용하지 않고 약간의 변경 후 XML 데이터를 서버 측의 파일에 다시 작성하고 싶습니다. 여기에 지금까지 무엇을 가지고 :

<button id='WriteToXml'>Write to XML</button> 

<script>   

    $('#WriteToXml').click(function() { 

     var output_xml; 

     $.ajax({ 
      type: "GET", 
      url: "/data/testdata_input.xml", 
      dataType: "xml", 
      async: false, 

      success: function(xml) {    
       $(xml).find('input').remove(); 
       $(xml).find('test').append('<output></output>'); 
       output_xml = xml; 
      } 
     }); 

     // Alternative code? 
     // $.post("/data/testdata_output.xml", $(output_xml), "xml"); 

     $.ajax({ 
      type: 'POST', 
      url: "/data/testdata_output.xml", //url of receiver file on server 
      data: $(output_xml) , //your data 
      contentType: "text/xml", 
      dataType: "xml", 
      cache: false,  
      async: false, 

      success: function(xml) {console.log('success\n'+ $(xml).find('test'));} 

     }); 

    }); 

</script> 

another SO thread에서, 나는 때문에 (보안상의 이유로) 자바 스크립트의 디자인에 서버 측 스크립트를 사용하는 데 필요한 것을 읽었다. 그러나 in another thread, 내가 PHP를 포함하지 않은 코드를보고, 그래서 내가 서버의 XML 파일에 기록이 코드를 사용할 수 바라고 있어요 :

$.ajax({ 
    type: 'POST', 
    url: "/data/testdata_output.xml", //url of receiver file on server 
    data: "<test></test>" , //your data 
    contentType: "text/xml", 
    dataType: "xml", 
    cache: false,  
    async: false, 

    success: function(xml) {console.log('success\n'+ $(xml).find('test') 

지금까지 내가 성공 메시지를 얻을 수 있지만, 서버의 XML 파일은 그대로 유지됩니다. 내가 오해 한 부분을 이해하는 것은 좋을 것입니다. 그 사이에 나는 서버 측에이 PHP 코드를 사용하여 작동하도록 노력할 것입니다 :

//javascript 
$.post('savedata.php', {data: "<test></test>",filename: "/data/testdata_output.xml"}, function(){/*Save complete*/}); 

//savedata.php 
$data = $_POST['data']; 
$filename = $_POST['filename']; 
$f = fopen($filename, 'w+'); 
fwrite($f, $data); 
fclose($f); 

을하지만 여전히 이해하는 것이 좋을 것이다.

또한, 나는 $ .post 코드보다는 PHP 파일에서 XML 파일 형식을 사용하는 방법에 대한 몇 가지 메모를 좋아하는 것 (은 $ .post의 JQuery와 문서 기준) :

$.post("/data/testdata_output.xml", "<test></test>", "xml"); 

감사

+0

서버 측 형식없이 서버 측 작업을 수행 할 수 있다고 생각하지 않습니다./어떤 종류의 아약스 처리기. 이런 종류의 주사를 허용하는 것은 심각한 보안 구멍이 될 것입니다. –

답변

1

서버를 수정하는 모든 것을 처리하려면 서버 측 스크립트가 필요합니다. 이 스크립트는 누가 무엇을 어디에 쓸 수 있는지에 대한 제한을 설정해야합니다. javascript의 디자인 때문이 아닙니다. 그렇지 않다면 누구나 웹 서버에 파일을 쓸 수 있습니다. 이는 분명 안전하지 않습니다.

요청의 URL이 사용자 입력에 응답하는 스크립트 인 경우 HTTP POST를 사용합니다. 요청 URL이 (귀하의 경우와 같이) 작성 될 파일을 나타낼 때, 일반적으로 HTTP PUT을 사용합니다. (실제로 PUT을 사용할 필요는 없습니다. 결국 핸들러 스크립트를 작성하는 것입니다.하지만 서버의 파일에 쓰는 것은 PUT을위한 것입니다.)

jquery 서버 측 스크립팅없이 POST 요청은 GET 요청과 크게 다르지 않습니다. URL에서 발견 된 파일의 내용이 응답 본문으로 반환됩니다. (차이점이 있습니다. 예를 들어 POST는 캐시되지 않습니다.하지만 jquery 예제의 요지입니다.)

+0

감사합니다. 방금 더 잘 이해하기 위해 REST에 대한 약간의 연구를 수행했습니다. 문제는 내가 가지고있는 질문이 많을수록 더 많다. 1. contentType이 'text/xml'로 설정된 경우 $ .ajax 호출에서 $ (xml) 객체를 사용할 수 있습니까? 이유는 내가 xml을 문자열로 직렬화하는 것을 피하기 위해서입니다. 2. $ .ajax 호출의 'url :'필드에 XML 파일 이름을 사용하는 것이 합리적인지, 그리고 어떤 서버 파일을 처리하는 데 사용되는 경우 http 아파치 서비스에 대한 설정이 필요합니까? 3. ajax 호출에서 'PUT'유형을 사용하는 경우 PHP 파일이 처리하므로 차이가 있습니까? – happyD

+0

이것은 와이어를 통해 바이트로 이동해야합니다. 그래서 그것은 도중에 문자열이되어야합니다. – bmargulies

+0

감사합니다 bmargulies."GET"유형 아약스 함수는 dataType xml을 허용하고 GET 호출에서도 데이터가 바이트로 와이어를 통해 이동해야하지만 PUT 호출에도 해당 기능이 있는지 궁금하거나 궁금해했습니다. – happyD

관련 문제