none
Вопрос по ASP.NET MVC - Ajax/jQuery RRS feed

  • Вопрос

  • Что мы имеем:

    Код на сервере:

     public class HomeController : Controller
        {
    
            public ContentResult XmlData(int id) {
                Random r=new Random();
                return Content("<text>"+"Сам текст"+"</text>", "text/xml");}
        }

    На клиентской части:

    var XmlData;
    ...............
    
    $.ajax({ url: "/Home/XmlData", data: { s: id }, dataType: "xml",
                success: function (data) { alert("Данные передались успешно!"); XmlData = data; }

    Проблема в том, что при данном раскладе, не вызывается функция XmlData. После успешного вызова функции, должен сработать alert, чего у меня не делается... Точка останова на серверной стороне показал что вызова функции вобще не происходит

    22 ноября 2012 г. 5:34

Ответы

  • Так, функция не вызывалась, но покопавшись, я нашел ошибки...

    1. по невнимательности {s: id} - нужно {id: id} -это причина того что метод контроллера не вызывался

    2. Каждая функция success: function() {...} должна возвращать false.

    Устранив эти 2 недостатка, все заработало как надо. Спасибо за помощь!!!!

    • Помечено в качестве ответа Higgs.Boson 22 ноября 2012 г. 7:16
    22 ноября 2012 г. 7:16

Все ответы

  • А где у Вас вызывается $.ajax, может не происходит вызов функции которая его содержит. И ещё, может Вы привели не полностью:

    $.ajax({ url: "/Home/XmlData", data: { s: id }, dataType: "xml",
                success: function (data) { alert("Данные передались успешно!"); XmlData = data; }});

    последние две скобки нужны.

    22 ноября 2012 г. 6:13
    Модератор
  • Со скобками нормально все, просто мой косяк- не скопировал до конца, они присутствуют в программе. Так что не в это причина
    • Изменено Higgs.Boson 22 ноября 2012 г. 6:21
    22 ноября 2012 г. 6:17
  • Прошу прощения: "А где у Вас вызывается $.ajax, может не происходит вызов функции которая его содержит." Что Вы имели ввиду?
    22 ноября 2012 г. 6:19
  • В какой функции она расположена в коде, что её содержит.
    22 ноября 2012 г. 6:24
    Модератор
  • Приведу весь скрипт

    <script type="text/javascript">

    var id=0;

    var XmlData;

    $(".But1").click(function () { id = $(this).attr("id"); $.ajax({ url: "/Home/Partial", data: { s: id }, dataType: "html", success: function (data) { $('#platform').html(data); } }) $.ajax({ url: "/Home/XmlData", data: { s: id }, dataType: "xml", success: function (data) { alert("Передача выполнена успешно"); XmlData = data; } }) }) $(document).ready(function () { $('.But1').first().trigger('click'); }); </script>



    • Изменено Higgs.Boson 22 ноября 2012 г. 6:36
    22 ноября 2012 г. 6:31
  • к /Home/Partial  обращается, вызывается частичное представление, этот участок срабатывает
    22 ноября 2012 г. 6:32
  • Попробуйте так:

    <script type="text/javascript">
      $(document).ready(function () {
        var XmlData;
        $(".But1").click(function () {
          id = $(this).attr("id");
          $.ajax({ url: "/Home/Partial", data: { s: id }, dataType: "html",
            success: function (data) { $('#platform').html(data); }
          });
          $.ajax({ url: "/Home/XmlData", data: { s: id }, dataType: "xml",
            success: function (data) { alert("Передача выполнена успешно"); XmlData = data; }
          });
        })
      });                                                                                            
    </script>

    22 ноября 2012 г. 6:40
    Модератор
  • Безрезультатно. Также
    22 ноября 2012 г. 6:45
  • Посмотрите в отладчике, срабатывает ли функция .click().
    22 ноября 2012 г. 6:47
    Модератор
  • Так, функция не вызывалась, но покопавшись, я нашел ошибки...

    1. по невнимательности {s: id} - нужно {id: id} -это причина того что метод контроллера не вызывался

    2. Каждая функция success: function() {...} должна возвращать false.

    Устранив эти 2 недостатка, все заработало как надо. Спасибо за помощь!!!!

    • Помечено в качестве ответа Higgs.Boson 22 ноября 2012 г. 7:16
    22 ноября 2012 г. 7:16
  • Проблема у Вас в типе параметра контроллера, не внимательно сразу посмотрел.

    //Сделайте его string.
    public ContentResult XmlData(string id) {
                Random r=new Random();
                return Content("<text>"+"Сам текст"+"</text>", "text/xml");}

    22 ноября 2012 г. 7:18
    Модератор
  • Спасибо, я тоже обнаружил свой косячок... Только вот после вызова первой функции, вторая не вызывалась, после того как первая стала возвращать false, все заработало
    22 ноября 2012 г. 7:20