我使用JavaScript创建了一个表单并尝试提交它,但它显示错误消息document.payment为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);
答案 0 :(得分:1)
尝试this:
output_data += "<\/script>"; //notice how the script tag is closed
答案 1 :(得分:1)
当您尝试提交表单时,表单仍然不是文档的一部分。将行更改为:
output_data += "window.onload = function() { document.getElementById('payment').submit(); }; ";
编辑:另一个“脏”选项是使用计时器:
output_data += "window.setTimeout(function() { document.getElementById('payment').submit(); }, 500);";`
这将尝试提交半秒延迟。
编辑2:刚才看起来更深 - 你是以错误的方式做的
您需要使用AJAX来执行Checkout,使用jQuery
AJAX变得非常简单易用
尝试一下,如果碰到墙壁,请告诉我们。 :)
我几乎可以肯定Google会公开允许跨域AJAX的jsonp
服务,如果没有,那么您将不得不从服务器端代码执行此操作。
答案 2 :(得分:0)
更改
output_data += "document.payment.submit();";
到
output_data += "document.getElementById('payment').submit();";
然后它应该适合你。
答案 3 :(得分:0)
id ="payment" name="payment"
您可以参考
getElementById()
getElementsByName()
如果它不起作用maby你的代码中有更多的元素名称与:
getElementById返回Element 其ID由elementId给出。如果不 这样的元素存在,返回null。 如果超过,则不定义行为 一个元素有此ID。
答案 4 :(得分:0)
试试这个:
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();
答案 5 :(得分:0)
对于那些来这个页面寻找问题解决方案的人来说,问题是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);