$.post() 的行为不同于 $.ajax(same parameters )

Posted

技术标签:

【中文标题】$.post() 的行为不同于 $.ajax(same parameters )【英文标题】:$.post() behaves different than $.ajax( same paramenters ) 【发布时间】:2011-07-30 16:24:12 【问题描述】:

我遇到了一些奇怪的事情,我想揭露并知道是否有人对此进行解释。

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

$.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

【问题讨论】:

datatype='JSON'改成dataType='json' @diEcho - $.ajax() 工作正常,只是它的 jquery 简写 $.post() 不像以前那样! “它不起作用”完全没用。您执行了哪些调试步骤? myObj 参数在调用堆栈中消失在哪里? 我正在使用 asp.net mvc,在 /Route/Save 中我可以看到参数“myObj”在 $.post() 中为空,在 $.ajax() 中具有值。 【参考方案1】:

我不知道为什么它以前可以工作;也许是 jQuery 更新改变了行为?

关于内容类型的问题,$.post 是围绕 $.ajax 的简写包装,从 $.ajax api page 开始,contentType 的默认值为 'application/x-www-form-urlencoded' .

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

【讨论】:

【参考方案2】:

$.ajax 的等价物应该是

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

【讨论】:

-1 因为没有正确阅读我的问题! $.ajax() 方法正在运行.... 是 $.post() 的简写,它以前不喜欢它!

以上是关于$.post() 的行为不同于 $.ajax(same parameters )的主要内容,如果未能解决你的问题,请参考以下文章

javascript ajax 调用通过仅使用 POST 方法的 fetch 调用:奇怪的行为是 post 后跟 get plus 再次请求所有资源?

Chrome 不知道 POST 请求

Rxjs toPromise 行为不同于 observable

POST 请求创建多个对象 AJAX/Django Rest Framework

浅谈Ajax的get 和post的区别

仅在一页上从 AJAX POST 获取 NTLM 挑战