Javascript document.form.submit не работает - PullRequest
2 голосов
/ 15 марта 2011

Я создал форму, используя JavaScript, и попытался отправить ее, но она показывает сообщение об ошибке document.payment is null.Пожалуйста, помогите мне

 var output_data = '<form   id ="payment" name="payment" method="POST" action="https://checkout.google.com/api/checkout/v2/checkoutForm/Merchant/922635804601464" accept-charset="utf-8">'
                                output_data += '<input type="hidden" name="item_name_1" value="Peanut Butter">';
                                output_data +='<input type="hidden" name="item_description_1" value="Chunky peanut butter.">';
                                output_data += '<input type="hidden" name="item_quantity_1" value="1">';
                                output_data += '<input type="hidden" name="item_price_1" value="3.99">';
                                output_data += '<input type="hidden" name="item_currency_1" value="USD">';
                                output_data += '<input type="hidden" name="ship_method_name_1" value="UPS Ground">';
                                output_data += '<input type="hidden" name="ship_method_price_1" value="10.99">';
                                output_data += '<input type="hidden" name="ship_method_currency_1" value="USD">';
                                output_data += '<input type="hidden" name="tax_rate" value="0.0875">';
                                output_data += '<input type="hidden" name="tax_us_state" value="NY">';
                                output_data += '<input type="hidden" name="_charset_">';
                                output_data += '</form>';
                                //alert(output_data);
                                //return false;
                                output_data += "<script>";
                                output_data += "document.getElementById('payment').submit();";
                                output_data += "</script>";                
                                document.write(output_data);    

Ответы [ 6 ]

1 голос
/ 15 марта 2011

Форма все еще не является частью документа, когда вы пытаетесь отправить его. Измените строку на:

output_data += "window.onload = function() { document.getElementById('payment').submit(); }; ";

Редактировать: другая «грязная» опция использует таймер:

output_data += "window.setTimeout(function() { document.getElementById('payment').submit(); }, 500);";`

Это попытается отправить с задержкой в ​​полсекунды.

Редактировать 2: Только сейчас посмотрел глубже - Вы делаете это неправильно.
Вам нужно использовать AJAX для выполнения проверки, используя jQuery AJAX становится действительно простым в использовании.
Попробуйте и дайте нам знать, если вы столкнетесь со стенами. :)

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

1 голос
/ 15 марта 2011

Попробуйте это :

output_data += "<\/script>";    //notice how the script tag is closed
0 голосов
/ 03 марта 2016

Для тех, кто заходит на эту страницу в поисках решения своей проблемы, проблема в document.write. Вы получаете доступ к форме, созданной с использованием записи документа, и в данный момент недоступны. (Я видел проблему больше в https (не в http) и IE11.

Следующее решение JavaScript работает для меня. Создать форму, используя createElement

var oForm = document.createElement("FORM");

oForm.id = "taskslabelForm";
oForm.name = "taskslabelForm";
oForm.style.display = "none"; //You might not want to show the form
oForm.target="_self"; //Your target
oForm.method="POST";
oForm.action="YOUR-ACTION-HERE";

document.body.appendChild(oForm);
oForm.submit();
document.body.removeChild(oForm);
0 голосов
/ 15 марта 2011

Попробуйте это:

var output_data = '<form   id ="payment" name="payment" method="POST" action="https://checkout.google.com/api/checkout/v2/checkoutForm/Merchant/922635804601464" accept-charset="utf-8">'
output_data += '<input type="hidden" name="item_name_1" value="Peanut Butter">';
output_data +='<input type="hidden" name="item_description_1" value="Chunky peanut butter.">';
output_data += '<input type="hidden" name="item_quantity_1" value="1">';
output_data += '<input type="hidden" name="item_price_1" value="3.99">';
output_data += '<input type="hidden" name="item_currency_1" value="USD">';
output_data += '<input type="hidden" name="ship_method_name_1" value="UPS Ground">';
output_data += '<input type="hidden" name="ship_method_price_1" value="10.99">';
output_data += '<input type="hidden" name="ship_method_currency_1" value="USD">';
output_data += '<input type="hidden" name="tax_rate" value="0.0875">';
output_data += '<input type="hidden" name="tax_us_state" value="NY">';
output_data += '<input type="hidden" name="_charset_">';
output_data += '</form>';
document.write(output_data);
document.getElementById('payment').submit();
0 голосов
/ 15 марта 2011
id ="payment" name="payment"

Вы можете обратиться к этому по

getElementById() 
getElementsByName()

Если это не работает, возможно, в вашем коде больше элементов с таким же именем, как:

getElementById Возвращает элемент чей ID дается elementId. Если нет такой элемент существует, возвращает ноль. Поведение не определено, если более один элемент имеет этот идентификатор.

0 голосов
/ 15 марта 2011

изменить

output_data += "document.payment.submit();";

на

output_data += "document.getElementById('payment').submit();";

тогда это должно работать для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...