Как сохранить файл на сервере, нажав кнопку в Javascript - PullRequest
0 голосов
/ 03 марта 2012

Хорошо, поэтому я экспериментирую с HTML5 и создал простое приложение для рисования в Javascript, чтобы рисовать там, где на экране находится мышь пользователя. Работает нормально.

Затем я хотел сохранить координаты в файл. Моя программа уже имела массив координат x и массив координат y из кода Javascript.

Когда пользователь нажимает кнопку, onClick вызывает функцию в Javascript, которая использует jQuery, как в верхнем ответе здесь Как получить данные функции JavaScript в переменную PHP пытается передать это в PHP-файл для сохранения.

Однако это не работает. Должен ли я передавать данные обратно в исходный документ php, который содержит холст? Если да, то как мне заставить его выполнить код для сохранения при запуске PHP, когда документ загружен??

КОД:

Хорошо, это в оригинальном php-файле, который содержит HTMl для веб-страницы, включая canvas. Вот соответствующая кнопка сохранения:

<button type="button" onclick="saveDrawing()" id="saveButton">Save</button>

Это вызывает следующее в отдельном файле JS

function saveDrawing(){
// First check that not drawing and have data
if (!readyToDraw && clickX!=null){  
    // If ready then pass back to the PHP file the data
    $url = 'file_save_test.php';
    $.get($url, {x_coords: getXCoords(), y_coords: getYCoords()});
    }
else {
    alert("Please add some coordinate points and press Finish before saving");
}
}

и file_save_test.php содержит только следующее

<?php

// retrieve data from the JS
$buffer_data['x_coords'] = $_GET['x_coords'];
$buffer_data['y_coords']  = $_GET['y_coords'];

$x_s = $_GET['x_coords'];
$y_s = $_GET['y_coords'];

// first want to open a file
$file_name = "data_test.txt";
$file_handler = fopen($file_name, 'w');

// now to loop through arrays and write!
/*for ($i = 0; $i < sizeof($x_s); i++){
    fwrite($file_handler, "$x_s[i], ");
    fwrite($file_handler, "$y_s[i]\n");
} */


fclose($file_handler);


?>

Ответы [ 3 ]

1 голос
/ 03 марта 2012

В вашем PHP-файле похоже, что ваш код fwrite закомментирован. Вы ожидаете, что он запишет в этот файл data_test.txt? Попробуйте изменить ваш PHP-файл, чтобы распечатать результаты и вернуть его обратно в ваш javascript, чтобы увидеть, правильно ли передаются данные.

$.get($url, {x_coords: getXCoords(), y_coords: getYCoords()},
    function(data){
        alert("Data Loaded: " + data);
    });

PHP

print_r($_GET);

EDIT

Измените ваш PHP-файл на что-то вроде этого, если он правильно оповещает данные (он должен добавить координаты к вашему файлу):

<?php

// retrieve data from the JS
$x_s = $_GET['x_coords'];
$y_s = $_GET['y_coords'];

$file_name = "data_test.txt";
$file_handler = fopen($file_name, 'a');
fwrite($file_handler, "$x_s, $y_s \n");
fclose($file_handler);

?>

РЕДАКТИРОВАТЬ 2

Обновите цикл for до исходного кода

for ($i = 0; $i < count($x_s); $i++){
    fwrite($file_handler, $x_s[$i] . ", ". $y_s[$i] . "\n");
}
0 голосов
/ 03 марта 2012

Я бы отправил данные в новый php-скрипт с именем saveCoords.php или что-то в этом роде.

Вы говорите, что у вас уже есть координаты в массиве JavaScript, поэтому это будет выглядеть примерно так ...

//JAVASCRIPT FUNCTION which will request php file to store info
function storeCoords(xCoordArray, yCoordArray){
  var xCoords = JSON.stringify(xCoordArray);
  var yCoords = JSON.stringigy(yCoordArray);

  var request = new XMLttpRequest(); //will need to change for older ie 
  request.onreadystatechange = function(){
    //functions to handle returning information from php file..
  }

  request.open("GET","saveCoords.php?xCoords="+xCoords+"&yCoords="+yCoords, true);
  request.send();
}

И тогда файл saveCoords.php будет выглядеть примерно так:

<?php
  $xCoords = json_decode($_GET['xCoords']);
  $yCoords = json_decode($_GET['yCoords']);

  //now you have a php array of xCoords and yCoords, which you can store
?>

Это скелет, но я думаю, что он затрагивает основные моменты, но комментируйте любые вопросы.

0 голосов
/ 03 марта 2012

Я хотел бы, чтобы ваша кнопка вызова вызывала метод jQuery $. Post () .Отправьте данные в другой файл PHP, который либо вставляет их в базу данных, либо сохраняет их в виде файла.Я не рекомендую использовать исходный документ для публикации данных, потому что клиент должен будет загрузить весь DOM, а сервер запустит любой другой код, который вам не нужен.

Это столько же, сколько яможет действительно помочь вам, не видя ни одного вашего кода.

...