$.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 再次请求所有资源?
Rxjs toPromise 行为不同于 observable