2015-08-20 4 views
1

Я делаю сайт, который помогает управлять таблицей 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 закончил выполнение.

+0

Что делает getRequest()? Возможно ли это асинхронный вызов AJAX? Если это так, следующий код должен быть выполнен в функции обратного вызова. – HaukurHaf

+0

Это вызов AJAX, но я не знаю, что бы классифицировать его как асинхронный. Он создает XMLHttpRequest, а затем вызывает open() и send(). URL, на который он называет это, - это php-страница, которая копирует целую кучу данных SQL из одной таблицы в другую. –

+0

Хорошо, это асинхронно по умолчанию, поэтому, если вы явно не говорите об этом иначе, это так. Это в основном означает, что метод getRequest() не всегда будет выполняться полностью, так как браузер сразу же пытается отправить форму. Это может также привести к поведению, которое вы описываете. Правильный способ состоял бы в том, чтобы getRequest() принял функцию обратного вызова, которая выполняется после завершения запроса. Затем код отправки формы должен быть перемещен в эту функцию обратного вызова. – HaukurHaf

ответ

2

Что такое getRequest()? Выполняет ли вызов async AJAX?

Это в основном означает, что метод getRequest() не всегда будет выполняться полностью, так как браузер сразу же пытается отправить форму. Это может также привести к поведению, которое вы описываете. Правильный способ состоял бы в том, чтобы getRequest() принял функцию обратного вызова, которая выполняется после завершения запроса. Затем код отправки формы должен быть перемещен в эту функцию обратного вызова.

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