сообщение jquery — это ajaxrequest?

#jquery #asp.net-mvc-2

#jquery #asp.net-mvc-2

Вопрос:

я пытался заставить это работать в течение целых 3 часов. я делаю сообщение jquery, но где-то в строке я делаю что-то неправильно, но я не понимаю, что.

в моем методе я проверяю, является ли это ajaxrequest, и если это так, я возвращаю строковое сообщение на основе результата.

 [HttpPost]
    public ActionResult PostJquery(ContactViewModel viewModel)
    {
        if (Request.IsAjaxRequest())
        {
            if (!string.IsNullOrEmpty(viewModel.Email))
            {
                return Content("success");
            }
            else
            {
                return Content("Fail");
            }   
        }
        else
        {
            return RedirectToAction("About");
        }
    }
  

мой jquery и html выглядят следующим образом.

 <% using (Html.BeginForm())
   {%>
<%: Html.TextBoxFor(model => model.Email) %>
<br />
<br />
<%: Html.TextBoxFor(model => model.Title) %><br />
<input type="submit" value="Save" id="button" />
<%} %>


<script src="<%= Url.Content("~/Scripts/jquery-1.5.2.js") %>" type="text/javascript"></script>

<script type="text/javascript">
    $(document).ready(function () {            
        $('#button').click(function (e) {
                            $.post('/Home/PostJquery', { viewModel: $('form').serialize() }, function (data) { alert(data); });                
        });
    });

</script>
  

что он делает, так это переходит в метод и перенаправляет на сайт about, потому что это не ajaxrequest, если я удалю его, он вернет успех, но это приведет меня к пустой странице с текстом success writen. это не вызывает успеха в оповещении. что я, возможно, делаю не так? должен ли я использовать .post или .ajax?

спасибо за информацию, ребята

Ответ №1:

Вам нужно отменить действие кнопки по умолчанию, которое заключается в отправке формы, возвращая false:

 $(function () {            
    $('#button').click(function() {
        $.post('/Home/PostJquery', $('form').serialize(), function (data) { 
            alert(data); 
        });
        return false;
    });
});
  

Также обратите внимание на способ передачи параметров. .serialize() Метод уже подготавливает запрос, так что это то, что вы должны отправить в качестве второго аргумента.

но лучший способ AJAXify формы — подписаться на .submit() событие этой формы:

 $(function () {            
    $('form').submit(function() {
        $.post(this.action, $(this).serialize(), function (data) { 
            alert(data); 
        });
        return false;
    });
});
  

И еще лучший способ — использовать плагин jquery form, который превращает ваш код в:

 $(function () {            
    $('form').ajaxForm(function(data) {
        alert(data);
    });
});
  

Примечание: убедитесь, что вы установили правильный тип контента на своем сервере при возврате из запроса AJAX.

Комментарии:

1. Спасибо, чувак, я попробовал функцию (e), e.preventDefault(); безуспешно. я полностью пропустил возвращаемое значение false в документации. ты спас мой день, Дарин.

2. что вы имеете в виду под установкой правильного типа контента? можете ли вы привести мне краткий пример?

3. @Dejan.S, вот так: return Content("success", "text/plain"); или, если вы используете Json: return Json(new { success = true });