0

因此,我已将“已完成”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'>

这当然行不通...;-(

4

1 回答 1

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

于 2013-02-06T23:41:09.810 回答