Я делаю сайт, который помогает управлять таблицей SQL. На данный момент я хочу, чтобы иметь возможность перезагрузить мою страницу, но с некоторыми новыми переменными. То, как я это сделал, - это сделать форму (называемую перенастройкой) с несколькими скрытыми текстовыми полями и действием, которое является только текущей страницей (в данном случае «connect.php»). Как так:document.forms.submit висит моя страница
<form action='connect.php' method='post' id='rerouter'>
<input type='hidden' name='foo' id='foo'></input>
<input type='hidden' name='bar' id='bar'></input>
<input type='hidden' name='foobar' id='foobar'></input>
</form>
Когда приходит время, чтобы перезагрузить страницу, я заселить эти с текстовыми областями новых значениями я хочу, то я отправить форму, как это (GetRequest() вызывает другой PHP файл, который только что . создает строку SQL и выполняет его, я просто включить его здесь, чтобы показать, что есть логика перед процессом Rerouting, который до сих пор выполняет):
...
getRequest(str, succ, err);
document.getElementById('foo').value = fooText;
document.getElementById('foo').value = barTest;
document.getElementById('foobar').value = foobarText;
document.forms['rerouter'].submit();
Это прекрасно работает, за исключением случая целых страниц замерзают. Единственный способ разморозить его - перезагрузить страницу, затем она предложит вам ошибку «О, привязка» (в Chrome), которую необходимо перезагрузить. Функция getRequest() по-прежнему выполняется нормально, но код где-то стоит. Я не нашел способ последовательно воспроизводить проблему, кроме как вызывать эту функцию снова и снова, пока она, наконец, не сработает, но я буду держать вас в курсе, если я обнаруживаю шаблон. Кроме того, у меня нет доступа к jQuery.
РЕШЕНИЕ: @HaukurHaf указал, что я использовал асинхронный вызов AJAX нестабильно. Иногда PHP, вызываемый методом getRequest(), не был завершен, когда вызывается form.submit(). Я переехал некоторый код вокруг так что моя основная функция выглядит следующим образом:
...
document.getElementById('foo').value = fooText;
document.getElementById('foo').value = barTest;
document.getElementById('foobar').value = foobarText;
getRequest(str, succ, err);
и моя функция Succ выглядит следующим образом:
function succ() {
document.forms['rerouter'].submit();
}
(она была пуста и раньше). Теперь форма не будет передаваться, пока мы не будем абсолютно уверены, что PHP закончил выполнение.
Что делает getRequest()? Возможно ли это асинхронный вызов AJAX? Если это так, следующий код должен быть выполнен в функции обратного вызова. – HaukurHaf
Это вызов AJAX, но я не знаю, что бы классифицировать его как асинхронный. Он создает XMLHttpRequest, а затем вызывает open() и send(). URL, на который он называет это, - это php-страница, которая копирует целую кучу данных SQL из одной таблицы в другую. –
Хорошо, это асинхронно по умолчанию, поэтому, если вы явно не говорите об этом иначе, это так. Это в основном означает, что метод getRequest() не всегда будет выполняться полностью, так как браузер сразу же пытается отправить форму. Это может также привести к поведению, которое вы описываете. Правильный способ состоял бы в том, чтобы getRequest() принял функцию обратного вызова, которая выполняется после завершения запроса. Затем код отправки формы должен быть перемещен в эту функцию обратного вызова. – HaukurHaf