Member 13802778 Ответов: 1

Как я могу получить вывод локального хранилища на сервер?


Цель моего скрипта - сохранить вывод формы в локальное хранилище в браузере, если сигнал не позволяет подключиться к серверу, используя iPad в удаленных местах. Затем впоследствии получить данные обратно, когда сигнал будет восстановлен.
Я уже пару недель пытаюсь получить локальное хранилище для обратной передачи на мою страницу в формате php. Я получаю его обратно нормально, как javascript, но я не могу понять, как отправить на сервер, а затем вернуть его на страницу. Я скопировал несколько различных битов скрипта с веб-сайтов, включая ajax, но я действительно не понимаю javascript достаточно, чтобы заставить его работать. Ни один из javascript не является моим собственным творением. Скрипт можно загрузить и запустить, чтобы показать, что он работает.
Код, который я первоначально дал, был кем-то изменен. Теперь он вообще не будет работать, потому что теги скрипта были удалены.

Обновление: теперь я изменил образец кода обратно на оригинал с изменениями, предложенными для POST вместо GET.

Что я уже пробовал:

<?php
$php_result=$_POST['result'];
print "This is the php result from server <br>result=".$php_result."<br><br>";
print "This is the javascript output from storage...";
$customer=$_POST['customer'];

?>
<!DOCTYPE html>
<html>
<body>
<div id="result"></div>
<form method = "POST" action = "" name="cust_form">
<p>Type anything in the box</p>
<input type="text" name="customer" size="10" value="<?php print $customer;?>">

<p><input type="submit" value="Continue"></p>
</form>
<script>
var customer = <?php echo json_encode($customer); ?>;
if (typeof(Storage) !== "undefined") {
localStorage.setItem("cust", customer);

document.getElementById("result").innerHTML = localStorage.getItem("cust");

xhttp.onreadystatechange = function() {
getElementById("result").innerHTML = localStorage.getItem("cust");

  if (this.readyState == 4 && this.status == 200) {

  }
};


xhttpRequest.open('POST', 'http://www.jhw1.com/local_store.php', true);
xhttpRequest.send();
};


</script>
</body>
</html>

Member 13802778

Да, php и javascript изменились, чтобы Читать "POST" вместо "GET".

Member 13802778

Нужен ли мне какой-то utton для отправки на сервер?

Member 13802778

Следует читать "кнопка"

1 Ответов

Рейтинг:
2

Kornfeld Eliyahu Peter

HTTP-GET не отправляет скрытые поля на сервер автоматически, поэтому у вас есть два варианта...
1. добавить его в параметр запроса
2. Используйте сообщение

Ваша вторая проблема здесь:

<div id="result"></div>
<form method = "POST" action = "" name="cust_form">
  <p>Type anything in the box</p>
  <input type="text" name="customer" size="10" value="<?php print $customer;?>">
  <p><input type="submit" value="Continue"></p>
</form>

"Результат" вы используете не скрытое поле (означает ввод с типом hidden), а div, и он также находится вне формы...
Вы должны использовать разметку для этого:
<div id="result"></div>
<form method = "POST" action = "" name="cust_form">
  <p>Type anything in the box</p>
  <input type="text" name="customer" size="10" value="<?php print $customer;?>">
  <p><input type="submit" value="Continue"></p>
  <input type="hidden" id="result">
</form>


-- РЕДАКТИРОВАТЬ --
Предлагаемое решение:
sample.php
<?php
  $php_result = $_POST['result'] ? $_POST['result'] : 'server';
  $customer = $_POST['customer'];
  echo "From server =" . $php_result;
  echo "From client = " . $customer;
?>

<!DOCTYPE html>
<html>
  <body onload="initStorage()">
    <form method="POST" action="sample.php" onsubmit="saveStorage()">
      <p>Type anything in the box</p>
      <input type="text" name="customer" size="10" value="<?php echo $customer;?>">
      <input type="hidden" name="result" value="<?php echo $php_result;?>">
      <input type="submit" value="Continue">
    </form>
  </body>

  <javascript>
    function initStorage()
    {
        // store 'result' on local storage
    }

    function saveStorage()
    {
        // save local storage to 'result'

        return(true); // to continue...
    }
  </javascript>
</html>


Member 13802778

Спасибо за ваш ответ. Теперь я изменил GET to POST и попробовал его, но по-прежнему никакого выхода. URL-адрес, где я тестирую скрипт, таков: http://www.jhw1.com/local_store.php

Kornfeld Eliyahu Peter

Вопрос в следующем: Вы тоже изменили PHP?

Member 13802778

Извините, я новичок на этом сайте. Я ответил не в том месте. Пожалуйста, ознакомьтесь с пересмотренным кодексом выше.

Kornfeld Eliyahu Peter

В стандартном HTTP POST скрытое поле должно находиться внутри формы, которая будет отправлена на сервер...

Member 13802778

Я понимаю это, но я безнадежен с javascript, поэтому я не знаю, как это сделать. Я просто попытался переместить тег end form после тега end scrpt, но это не имеет никакого значения.

Kornfeld Eliyahu Peter

Только не сценарий! Скрытые поля!!!

Member 13802778

Но в форме нет скрытых полей.

Member 13802778

Я действительно ценю помощь, которую вы мне оказываете. Не могли бы вы привести пример кода, который я должен использовать?

Kornfeld Eliyahu Peter

См. раздел обновленное решение...

Member 13802778

Это имеет смысл, но я изменил разметку, и я все еще не получаю никакого результата. Должен ли я иметь отдельную кнопку, так как кнопка Продолжить была там, чтобы добавить данные в локальное хранилище? Должна ли она быть отдельной формой?

Kornfeld Eliyahu Peter

На мой 12-й взгляд на ваш код я действительно понял, что я не вижу, где вы вызываете свой код...
Это не функция, поэтому она будет выполнена только один раз, когда страница загружена... и, вероятно, ничего не делает тогда...

Member 13802778

Он, безусловно, отправляет данные, введенные в текстовое поле, в локальное хранилище браузера. Используя Firefox local storage inspector, он показан там. Данные тоже возвращаются, как видно после строки "это вывод javascript из хранилища...". я предположил, что результат также будет отправлен на сервер. После ваших исправлений я не могу придумать другого способа сделать это.

Member 13802778

Еще раз спасибо за ваши усилия. Я думаю, что в конце концов найдется ответ на этот вопрос. Мне лучше начать с нуля и изучить javascript. Не то, чтобы у меня было какое-то желание, но мне нужно решить эту проблему рано или поздно.

Kornfeld Eliyahu Peter

Мне не совсем понятно, чего вы добиваетесь, но добавлено предложение, которое показывает, как сохранить боковую ценность серверов во время post-back...

Member 13802778

Нет, к сожалению, не ответ. Я должен был объяснить, что вся идея сохранения в локальном хранилище заключается в том, что браузер можно отключить, а данные можно получить впоследствии, когда он снова будет включен. Он сохраняет его на неопределенный срок без использования сервера. Это бесполезно, если только данные не могут быть использованы после извлечения и повторной заполнения формы для сохранения в базе данных SQL.

Kornfeld Eliyahu Peter

ОК... Смотрите обновленное решение...

Member 13802778

Нет, это не сработало.