代码之家  ›  专栏  ›  技术社区  ›  Rose Perrone

拦截表单提交的默认行为

  •  0
  • Rose Perrone  · 技术社区  · 14 年前

    当执行以下代码时,参数将显示在url中,并且表中的内部HTML不会更改。文档中说,当提供数据时,默认的请求方法是POST。

    $('form').submit(function() {
        var data = $(this).serializeArray();
        $('#items-table').load("drawer.php", data)
    });
    

    这个 data 正确输出为 MM=01&dd=01&yyyy=2001&HH=12&mm=00&ss=00&entername=Dr.+Clock&optionsRadios=option3&enteritemid= ,但它显示为当前页面的参数,而不是load()函数中标识的页面, drawer.php 。

    编辑 :即使我使用 serializeArray() 为了确保将对象作为第二个参数而不是字符串传递给load(),我仍然发现调用了GET请求,并且当前页面的URL获得了这些参数。来自“drawer.php”的响应没有出现在div中。

    第二次编辑 :事实证明,我未能拦截表单的操作,因为我没有包含以下行: return false; 在提交函数的末尾。

    3 回复  |  直到 14 年前
        1
  •  1
  •   Rose Perrone    14 年前

    我未能拦截表单的操作,因为我没有包含以下行: return false; 在提交函数的末尾。包括这条线解决了问题。

        2
  •  0
  •   Torsten Walter    14 年前

    您正在使用 var data = $(this).serialize();

    医生说:

    .serialize()方法以标准的URL编码表示法创建一个文本字符串。

    http://api.jquery.com/serialize/

    您需要提供一个对象作为load的第二个参数来使用POST。

        3
  •  0
  •   The Alpha    14 年前

    如果数据是作为对象提供的,则使用POST方法;否则 假定为GET。

    $('#items-table').load("drawer.php", {form_data:data})
    

    所以通过一个 object/{} 而不是 string 因为 serialize() 方法创建一个与 & 而且你也用过 $data 而不是 data 。