$ .post()的行为与$ .ajax不同(相同的参数)

时间:2011-04-06 09:50:19

标签: json jquery firefox4

我遇到了一些奇怪的东西,我想揭露并知道是否有人作为解释。

有一段时间我有一个简单的帖子:

$.post("/Route/Save", { myObj: JSON.stringify(myObj), accessToken: getAccessToken()}, function(data)
{
    //do stuff
});

它运行良好,现在不起作用,只在路由控制器中正确接收到accessToken参数

我把它改为:

$.ajax({
    url: "/Route/Save",
    data: '{ myObj:' +  JSON.stringify(myObj) + ',accessToken:"' + getAccessToken()+'"}',
    type: 'POST',
    datatype: 'JSON',
    contentType: 'application/json',
    success: function (data)
    {
        //Do stuff
    }
});

现在它有效。我正在使用firefox 4和IE9并且相信原因与浏览器发送信息编码的方式有关...在$ .post()情况下它看起来像是以application / x-www-form的形式发送数据-urlencoded

我很高兴收到你们的来信!

此致 byte_slave

2 个答案:

答案 0 :(得分:0)

我不确定为什么之前有效;也许jQuery更新改变了行为?

关于内容类型的问题,$ .post是$ .ajax的简写包装,而$.ajax api page的内容类型的默认值是'application / x-www-form-了urlencoded”。

AFAIK,您不能使用$ .post()指定contentType。我可能错了。

答案 1 :(得分:-1)

$ .ajax的等价物应为

$.ajax({
    url: "/Route/Save",
    data: { myObj: JSON.stringify(myObj), accessToken: getAccessToken()},
    type: 'POST',       
    success: function (data)
    {
        //Do stuff
    }
});