2013-10-07 5 views
1

Я понял, как читать локальный файл .TXT на сервере в JS, используя API XMLHttpRequest, но для жизни меня я не могу заставить его писать в файл. Возможно ли это или только для чтения файлов?Запись в файл JS с использованием XMLHttpRequest?

Мой код читать отлично работает:

var fReader = new XMLHttpRequest(); 

fReader.onreadystatechange=function() { 
    if(fReader.readyState==4 && fReader.status==200) { 
    parseText(fReader.responseText);//Processes the file. 
}} 
fReader.open("GET",fFileLoc,true); 
fReader.send(); 

настоящее время я использую PHP для записи в файл, но это далеко от идеала. Я бы очень хотел, чтобы мы JS сделали это. Есть предположения? Есть ли другой подход к этому? Является ли PHP единственным способом?

Спасибо заранее,

-Dave

EDIT: @rjmunro + другие: Я обнаружил, что использование PHP был лучший способ пойти об этом ... Мой пересмотренный код выглядит следующим образом. (C & C приветствуется).

JS:

var fReader = XMLHttpRequest(); 
//var params = "MODE=GET&File=Data.txt";//To read 
//var params = "MODE=POST&File=Data.txt&Message=" + myMessage;//To write 

    fReader.onreadystatechange=function() { 
     if(fReader.readyState==4 && fReader.status==200) { 
      //Not really any response text if writing... 
      parseText(JSON.parse(fReader.responseText).GET); 
     } 
    } 

    fReader.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    fReader.setRequestHeader("Content-length", params.length); 
    fReader.setRequestHeader("Connection", "close"); 

    fReader.send(params); 

PHP

$MODE = $_POST['MODE']; 
switch($MODE) { 
    case('GET'): 
     #Read in file and process, then return output. 
     $return['GET'] = file($_POST['File']); 
    break; 

    case('POST'): 
     if(file_exists($_POST['File'])){ 
      $file = fopen($_POST['File'],"a"); 

      $data = $_POST["Message"]; 

      fwrite($file,$data); 
      fclose($file); 
     } 
    #$return['POST'] = "some message?"; 
    break; 
} 
echo json_encode($return); 

Единственное, что я не 100% от этого решения почему я должен setRequestHeader? Хром действительно не нравится это ... Я вытащил код из другого сообщения.

+0

Является ли JS на вашем сервере также там, где хранится файл, который вы хотите записать, например, node.js, потому что из браузера только это невозможно? – Bernhard

+1

Вы можете принять содержимое, которое должно быть написано с использованием JS, а затем передать его на PHP с помощью 'XMLHttpRequest' и, наконец, использовать PHP для записи в файл. Да, php нам нужно писать в файл. –

ответ

0

Возможно, вы можете настроить apache для принятия запросов PUT, а затем отправить их с помощью XMLHttpRequest (я бы использовал jQuery.ajax(), чтобы отвлечь это).

Возможно, лучше иметь PHP (или другой серверный язык) для вас, однако, поскольку будет сложно контролировать аутентификацию, используя только Apache.

1

XMLHttpRequest позволяет создавать HTTP-запросы.

Если вы хотите использовать его для записи в файл, HTTP-сервер должен ответить на запрос, записав файл.

Чтобы сделать это, вы можете использовать the PUT verb (обратите внимание, что для этого вам понадобится configure HTTP-сервер, ни один HTTP-сервер не позволит произвольным пользователям записывать файлы на диск сервера по умолчанию).

Вы также можете передавать данные, используя POST или другой тип запроса.

Является ли PHP единственным способом?

Вы можете использовать любой язык программирования, который вам нравится на сервере (с учетом того, что поддерживает сервер, например, если вы хотите использовать C#, то вы почти наверняка хотите сервер Windows с IIS и ASP.NET). Если вы хотите использовать JavaScript, то есть many options, из которых Node.js значительно более популярен, чем другие в настоящее время.

Смежные вопросы