$ .post () ведет себя не так, как $ .ajax (те же параметры) - PullRequest
0 голосов
/ 06 апреля 2011

Я наткнулся на что-то странное, что я хочу раскрыть и узнать, если кто-то объясняет это.

Некоторое время назад у меня был простой пост:

$.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- закодированный

Я буду рад услышать от вас, ребята!

С уважением, byte_slave

Ответы [ 2 ]

0 голосов
/ 06 апреля 2011

Я не уверен, почему это работало раньше;возможно, обновление jQuery изменило поведение?

Что касается вашего вопроса о типе контента, $ .post - это сокращенная оболочка для $ .ajax и со страницы $. ajax api ,значением по умолчанию для contentType является 'application / x-www-form-urlencoded'.

AFAIK, вы не можете указать contentType с помощью $ .post ().Хотя я могу ошибаться.

0 голосов
/ 06 апреля 2011

Эквивалент с $ .ajax должен быть

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