拦截表单提交的默认行为

时间:2012-08-02 23:30:45

标签: jquery

执行以下代码时,参数将显示在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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

  

如果数据作为对象提供,则使用POST方法;除此以外,   假设GET。

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

因此传递object/{}代替string,因为serialize()方法创建了一个用&设定的文字字符串,而且您还使用了$data代替data {1}}。

答案 2 :(得分:0)

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

医生说:

  

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

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

您需要提供一个对象作为加载的第二个参数才能使用POST。