2014-05-16 20 views
1

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

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]而不是我在该方法中指定的内容。

我在做什么错?

+1

的网址是否正确? – Se0ng11

+0

我试过使用上面显示的方法并直接将URL写入函数。但是,当它提交时,它会将ajax版本中的[object%20Object]替换为我的URL的末尾。使用非Ajax版本可以正常工作。 – Elie

+0

看起来像你的字符串网址不正确。在函数上放置一个断点,然后评估$(formid).attr('action')可以解决的问题。我敢打赌,它不是你期望的 – WhiteboardDev

回答

3

我觉得你越来越$.post$.ajax混合起来。 $.post$.ajax的简写,因为这样会将字符串url作为第一个参数,将对象作为数据,并将函数作为回调函数。 $.ajax在otherhand需要一个对象作为配置,因为你正在做的

即邮政签名

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

这是简写形式,

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

你似乎使用两者的混合物,并因此得到奇怪的行为,因为它调用toString的第一个参数传递到$.post这是[object Object],然后这是url编码为[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); } 
    }); 
+0

谢谢!这让我疯狂,但我看不出我做错了什么。把这个单词发布到ajax上也有窍门,并且感谢我所看到的行为的解释。 – Elie

1

使用这个代替..

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