Sencha Touch AJAX 调用 MVC

Posted

技术标签:

【中文标题】Sencha Touch AJAX 调用 MVC【英文标题】:Sencha Touch AJAX call to MVC 【发布时间】:2011-05-28 16:49:19 【问题描述】:
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 是与sencha 代码中其他地方的html 模板参数匹配的对象列表。即使那部分不匹配,我至少应该能够看到警报吧?

【问题讨论】:

【参考方案1】:

你可能是在做一个跨域请求,在这种情况下,你必须使用 JSONP。

如果使用 JSONP,则无法从控制器中使用 return Json(object)

检查API 中的 JSONP 类。有一个 ASP.NET 的示例。 您可以在 javascriptSerializer 类中使用将对象序列化为 JSON。 (其实Json方法就是在后面使用这个类)。

这个想法是你必须返回这样的东西:

var myJson = success:true;
someRandomMethod(myJson); // someRandomMethod is the callback parameter

【讨论】:

【参考方案2】:

你正在使用JSONP,你应该使用Ext.util.JSON

JSONP 以另一种方式工作,返回 JavaScript 而不是 JSON。

【讨论】:

【参考方案3】:

我不经常使用 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);
  
);

【讨论】:

以上是关于Sencha Touch AJAX 调用 MVC的主要内容,如果未能解决你的问题,请参考以下文章

Sencha touch2:Ajax Post请求成功和失败函数没有被调用?

我是不是需要在 sencha touch 应用程序中进行 ajax 调用的服务器?

Sencha Touch - AJAX 不工作

如何在 Sencha Touch 2 的 Ajax 请求中捕获请求异常?

在 Sencha Touch 2 中更改选项卡时发出 Ajax 请求

Sencha Touch 2 如何获取响应标头