2016-03-15 2 views
0

После нескольких дней поиска здесь мой вопрос (вопрос меня сильно раздражает)Почему мой POST-вызов ajax проходит как GET?

Я передаю вызов ajax с почтовым методом, чтобы отправить форму. К сожалению, $(form).submit() не подходит в моем случае. Вот JQuery код:

$.ajax({ 
    url: '/Controller/_MyJson', 
    type: 'POST', 
    method: "POST", 
    data: $('#form').serialize(), 
    success: function (data)    
    { 
     // I will add a redirection here later 
    } 

}); 

Регулятор:

[HttpPost] 
public JsonResult _MyJson (MyViewModel vm) 
{ 
//action here 
} 

Route Config: url: "{controller}/{action}/{id}"

Вопрос заключается в том, что в консоли Chrome мой вызов передается как GET, и это дает мне сообщение об ошибке 404 , На стороне контроллера существует метод _MyJson, и он имеет объявленный [HttpPost].

Моя версия jquery 2.1.4. Я использую aspx WebForms и модель MVC.

Я благодарен за любую помощь!

UPD: После перехода на отладчик Mozilla я обнаружил, что мой POST-вызов проходит с статутом 301, и есть GET с тем же именем, которое дает ошибку 404. O_o

+0

Вы используете конфигурацию маршрута? если это так, проверьте свои маршруты, чтобы увидеть, к чему он привязан. – Zaki

+0

Тип - это псевдоним метода. Вам не нужны оба. Но это не то, что решает вашу проблему. –

+0

Параметр 'type' бесполезен. Из документации jQuery: 'Вы должны использовать тип, если используете версии jQuery до 1.9.0.' –

ответ

1

Попробуйте использовать сокращенный:

$.post("/Controller/_MyJson", $('#form').serialize(), function (data) { 
    // stuff with data 
}); 
+0

Спасибо, и особенно за редактирование моего вопроса, я новичок в форматировании. Сокращение '.post' дает тот же результат, GET с ошибкой 404. Как вы думаете, я могу сделать '$ (форму) .submit', и если подача будет успешной, перенаправляйтесь на другую страницу? – bugkiller

+0

@ bugkiller Похоже на ваше сообщение в ваш запрос POST, ответ перенаправляется. Можете ли вы сохранить журнал и посмотреть, что происходит на вкладке «Сеть»? –

+0

Вы правы! POSt проходит с 301 Moved Permently statut, и есть метод GET с тем же именем, который дает ошибку 404 – bugkiller

1

Похоже, вы сериализацию целых данных формы. Метод HttpPost контроллера должен соответствовать этому объекту, иначе метод GET будет вызывать ошибку 404. Попробуйте создать пользовательский объект в контроллере и отправить соответствующие данные JSON из вызова ajax. Это решит проблему.

+0

Спасибо! Метод моего контроллера получает ViewModel, который соответствует модели формы. Например, когда я пытаюсь использовать $ (form) .submit, он работает отлично. Я просто не могу понять, как перенаправить на другую страницу после succesfull '$ (form) .submit', поэтому я делаю простой вызов ajax – bugkiller