所以我已将“已完成”HTML 表单的值转换为自定义DATA 对象,以供各种js.functions使用,这可能会或可能会在对象MAY之前不更新所述DATA 对象参数的值,或者最终可能不会(通过ajax)传递给PHP进行数据库操作 最终提交表单数据(对贝宝)。
当然我知道如何提交表单,并通过AJAX将对象作为POST数据传递,但我想知道如何或是否可以发布我的DATA对象(再次,以payapl)代替不得不停下来更新表单本身的输入值,这样我才能提交它。有点像...
<script>
data = {};
data.type ='form';
data.method ='post';
data.action ='https://www.sandbox.paypal.com/cgi-bin/webscr';
data.foo = 'foo';
data.bar = 'bar';
jQuery('#btn').click(function(){ jQuery('#form').submit(); });
jQuery('#post_data').click(function(){ data.submit();/*duh....???*/ });
</script>
<form id='data' action='https://www.sandbox.paypal.com/cgi-bin/webscr' method='post'>
<input type='text' name='foo' value='foo' />
<input type='text' name='bar' value='bar' />
</form>
<input type='button' id='btn' value='Submit'>
<input type='button' id='post_data' value='Post Data'>
当然不起作用......; - (
答案 0 :(得分:0)
正如Marc B在一条评论中所说,您可以将普通对象传入jQuery.post
,并在发送到服务器时将其“序列化”。从服务器获取响应并使用表单提交响应是一个不同的问题。实际上我假设“用于数据库操作的PHP”事物返回一个JSON对象,其中的字段与传入的字段相同 - 或者至少我们在表单中有表单字段,最终应该提交给paypal(或其他)。
只需发送data
即可:jQuery.post('yourDatabaseManipulation.php', data);
这个没有回调来处理结果...尝试处理导致以下有些疯狂的代码:
jQuery('#post_data').click(function() {
var $form = jQuery(this).parents('form');
jQuery.post('yourDatabaseManipulation.php', data).done(function(validatedData) {
// returned values: fill into form before submit
for (key in validatedData) {
// special cases need extra attention
if (key == 'action' || key == 'method') {
$form.attr(key, validatedData[key]);
} else if (key == 'type') {
// no idea what to do with this one, so ignore it
} else {
// everything else should have a input field in the form
// or it will just be dropped
// FIXME: we trust our server response not to do some nasty XSS via keys here
var $field = jQuery("input[name='"+key+"']", $form);
$field.val(validatedData[key]);
}
}
$form.submit();
}).fail( function(jqXHR, textStatus, errorThrown) {
// our very sophisticated error handling
alert('fail '+textStatus);
});
});
这应该取自yourDatabaseManipulation.php
获取的值,用“验证”值(包括可能的不同表单操作)覆盖用户输入的所有内容,然后提交表单。我不确定你是否愿意这样做,但我希望你能从中找出你真正想做的事情。
编辑:只是想出上述代码仅在您在测试时自动执行的<form>
内移动提交按钮时才有效。如果您不想这样做,请初始化保存表单的变量,例如var $form = jQuery('#data')