将自定义对象作为POST vars提交给url?

时间:2013-02-05 20:55:02

标签: jquery submit custom-object

所以我已将“已完成”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'>

当然不起作用......; - (

1 个答案:

答案 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')