我有一个表单,我试图使用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]
而不是我在方法中指定的错误。
我做错了什么?
答案 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);
}
);