Sencha Touch AJAX позвонить в MVC - PullRequest
1 голос
/ 28 мая 2011
Ext.util.JSONP.request({
                url: '/Home/GetMessagesMobile',
                callbackKey: 'callback',
                params: {
                    lat: geoip_latitude(),
                    lng: geoip_longitude(),
                    rad: 1,
                    sType: 0,
                    flow: 1,
                    lastId: 0,
                    lastRow: 0,
                    uniqueify: Math.random()
                },
                callback: function (data) {
                    var messages = data;
                    alert(messages);
                    home.update(messages); // refresh messages
                }
            });

Я могу отладить и нажать точку останова моего действия MVC и подтвердить, что данные возвращаются действием, однако alert никогда не отображается и ничего не происходит на стороне клиента. Похоже, по какой-то причине он не входит в callback.

Нужно ли сделать этот запрос другим? Я возвращаю Json результат от действия. Вот код:

return Json(retval);

Где retval - список объектов, которые соответствуют параметрам шаблона html в других местах кода sencha. Даже если эта часть не совпадает, я должен хотя бы видеть предупреждение, верно?

Ответы [ 3 ]

2 голосов
/ 28 мая 2011

Вы, вероятно, делаете междоменный запрос, в этом случае вы должны использовать JSONP.

А использование JSONP делает невозможным использование return Json(object) с контроллера.

Проверьте класс JSONP в API .Есть пример для ASP.NET.Вы можете использовать в JavaScriptSerializer класс для сериализации объекта в JSON.(На самом деле метод Json использует этот класс сзади).

Идея в том, что вы должны вернуть что-то вроде этого:

var myJson = {success:true};
someRandomMethod(myJson); // someRandomMethod is the callback parameter
0 голосов
/ 28 мая 2011

Я не очень часто использую Sencha / Ext, поэтому я мог бы быть далеко от базы, но разве это не должно быть:

Ext.Ajax.request({
  url: '/Home/GetMessagesMobile',
  params: {
    lat: geoip_latitude(),
    lng: geoip_longitude(),
    rad: 1,
    sType: 0,
    flow: 1,
    lastId: 0,
    lastRow: 0,
    uniqueify: Math.random()
  },
  success: function(data) {
    console.log(data);
  }
});
0 голосов
/ 28 мая 2011

Вы используете JSONP, вы должны использовать Ext.util.JSON

JSONP работает по-другому, возвращая JavaScript вместо JSON.

...