Устранение автоматической отправки PHP-формы [дубликат]

Вопрос был:

Как вернуть ответ от асинхронного вызова?

, который может быть интерпретирован как:

Как сделать синхронный асинхронный код синхронным?

Решение будет состоять в том, чтобы избежать обратных вызовов и использовать комбинацию Promises и async / await.

Я хотел бы привести пример для запроса Ajax.

(Хотя он может быть записан в Javascript, я предпочитаю писать его на Python и компилировать его в Javascript, используя Transcrypt . Это будет достаточно ясно.)

Позволяет сначала включить использование JQuery, чтобы $ был доступен как S:

__pragma__ ('alias', 'S', '$')

Определить функцию, которая возвращает Promise, в этом случае вызов Ajax:

def read(url: str):
    deferred = S.Deferred()
    S.ajax({'type': "POST", 'url': url, 'data': { },
        'success': lambda d: deferred.resolve(d),
        'error': lambda e: deferred.reject(e)
    })
    return deferred.promise()

Использовать асинхронный код, как если бы он был синхронным:

async def readALot():
    try:
        result1 = await read("url_1")
        result2 = await read("url_2")
    except Exception:
        console.warn("Reading a lot failed")

212
задан trejder 16 December 2014 в 12:23
поделиться

12 ответов

submit не является функцией

означает, что вы назвали вашу кнопку отправки или какой-либо другой элемент submit. Переименуйте кнопку в btnSubmit, и ваш звонок будет волшебным образом работать.

Когда вы называете кнопку submit, вы переопределяете функцию submit() в форме.

581
ответ дан Stefan van den Akker 28 August 2018 в 00:49
поделиться

, давая элементу формы имя submit, будет просто теневое свойство submit. убедитесь, что у вас нет элемента формы с именем submit, и вы должны иметь доступ к функции отправки просто отлично.

1
ответ дан aeid 28 August 2018 в 00:49
поделиться
<form action="product.php" method="post" name="frmProduct" id="frmProduct" enctype="multipart/form-data">

<input id="submit_value" type="button" name="submit_value" value="">

</form>

<script type="text/javascript">

document.getElementById("submit_value").onclick = submitAction;

function submitAction()
{
    document.getElementById("frmProduct").submit();
    return false;
}
</script>

EDIT: я случайно поменял идентификатор вокруг

10
ответ дан Chad Grant 28 August 2018 в 00:49
поделиться

Вы можете попробовать

<form action="product.php" method="get" name="frmProduct" id="frmProduct" enctype="multipart/form-data">

<input onclick="submitAction(this)" id="submit_value" type="button" name="submit_value" value="">

</form>

<script type="text/javascript">
function submitAction(element)
{
    element.form.submit();
}
</script>

У вас нет более одной формы с тем же именем?

-1
ответ дан Fabien Ménager 28 August 2018 в 00:49
поделиться

Убедитесь, что нет другой формы с тем же именем и убедитесь, что в форме нет имени = "submit" или id = "submit".

5
ответ дан gopeca 28 August 2018 в 00:49
поделиться

Использовать getElementById:

document.getElementById ('frmProduct').submit ()
-1
ответ дан Ilya Birman 28 August 2018 в 00:49
поделиться

В этой теме уже много ответов, но тот, который лучше всего работал (и простейший - одна строка!) для меня, был модификацией комментария Нила Э. Пирсона от 21 апреля 2013 года:

< blockquote>

Если вы застряли в своей кнопке отправки #submit, вы можете обойти ее, украв другой метод экземпляра экземпляра формы ().

Мое изменение в его методе, и что сработало для меня:

document.createElement('form').submit.call(document.getElementById(frmProduct));

1
ответ дан jlemley 28 August 2018 в 00:49
поделиться

Решение для меня заключалось в том, чтобы установить атрибут «form» кнопки

<form id="form_id_name"><button name="btnSubmit" form="form_id_name" /></form>

или js:

YOURFORMOBJ.getElementsByTagName("button")[0].setAttribute("form", "form_id_name");
YOURFORMOBJ.submit();
0
ответ дан ProtonIonNeutron 28 August 2018 в 00:49
поделиться

У меня была такая же проблема, когда я создавал приложение MVC, используя мастер-страницы. Пробовал искать элемент с 'submit' как имена, упомянутые выше, но это было не так.

В моем случае он создал несколько тегов на моей странице, поэтому возникли некоторые проблемы, ссылающиеся на правильную форму.

Чтобы обойти это, я позволю кнопке дескриптор, который будет использовать объект формы :

onclick="return SubmitForm(this.form)"

и с js:

function SubmitForm(frm) {
    frm.submit();
}
4
ответ дан Quangahh 28 August 2018 в 00:49
поделиться

Возможные решения - 1. Убедитесь, что у вас нет другого элемента с именем / id как submit. 2. Попробуйте вызвать функцию как onClick = "return submitAction();" 3. document.getElementById("form-name").submit();

1
ответ дан Ramki 28 August 2018 в 00:49
поделиться

Я использовал

var enviar = document.getElementById("enviar");
enviar.type = "submit"; 

Просто потому, что все остальное не работало.

0
ответ дан Ryan Bemrose 28 August 2018 в 00:49
поделиться

Если у вас нет возможности изменить name="submit", вы также можете отправить форму следующим образом:

function submitForm(form) {
    var submitFormFunction = Object.getPrototypeOf(form).submit;
    submitFormFunction.call(form);
}
3
ответ дан Terbiy 28 August 2018 в 00:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: