使用jQuery和Ajax提交表单来更改操作

时间:2014-05-16 02:47:32

标签: javascript jquery ajax forms

我有一个表单,我试图使用jQuery和AJAX提交。我通过点击链接触发提交,我已经添加了一个onclick方法。下面是提交相同表单的两个代码示例 - 第一个工作,但不是AJAX,而第二个方法给我404错误。

function submitmyform(formid) {
    $(formid).submit();
}

第二个例子尝试使用AJAX,给出相同的参数:

function submitmyformajax(formid) {
    $.post({
        type: "POST",
        url: $(formid).attr('action'),
        data: $(formid).serialize(),
        success: function(data) { alert(data); }
    });
}

我尝试使用submitmyformajax的另一种方法是:

function submitmyformajax(formid) {
    $.post({
        type: "POST",
        url: 'somehardcoded/url',
        data: $(formid).serialize(),
        success: function(data) { alert(data); }
    });
}

出于某种原因,这仍然给我一个404错误,尽管表单上的操作是正确的(它显示的URL与表单上的操作不同)。

我检查了错误控制台,它显示404错误指向somehardcoded/[object%20Object]而不是我在方法中指定的错误。

我做错了什么?

2 个答案:

答案 0 :(得分:3)

我认为您将$.post$.ajax混为一谈。 $.post$.ajax的简写,因此将字符串url作为第一个参数,将对象作为数据,将函数作为回调。另一方面,$.ajax将对象作为配置,正如您所做的那样

即。签名是

$.post( url [, data ] [, success(data, textStatus, jqXHR) ] [, dataType ] )

这是

的简写
$.ajax({
  type: "POST",
  url: url,
  data: data,
  success: success,
  dataType: dataType
});

你似乎正在使用两者的混合,因而得到奇怪的行为,因为它在你传递给$.post [object Object]的第一个参数上调用toString然后就是网址编码为[object%20Object]

使用

$.post($(formid).attr('action'),
       $(formid).serialize(),
       function(data) { alert(data); })

 $.ajax({
        type: "POST",
        url: $(formid).attr('action'),
        data: $(formid).serialize(),
        success: function(data) { alert(data); }
    });

答案 1 :(得分:1)

请改用..

$.post(
  'somehardcoded/url',
  {data:$(formid).serialize()},
  function(data) { 
    alert(data); 
  }
);