Sencha Touch AJAX 调用 MVC

发布于 2024-11-09 23:15:19 字数 977 浏览 0 评论 0原文

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 操作的断点,并确认该操作正在返回数据,但是,警报永远不会显示,并且客户端上没有任何反应。看起来由于某种原因它没有进入回调

我需要改变这个请求吗?我正在从该操作返回一个 Json 结果。代码如下:

return Json(retval);

其中 retval 是与 sencha 代码中其他位置的 html 模板参数匹配的对象列表。即使该部分不匹配,我至少应该能够看到警报,对吗?

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
                }
            });

I can debug and hit the breakpoint of my MVC action, and confirm that data is being returned by the action, however, the alert never gets shown, and nothing happens on the client side. Looks like it's not entering the callback for some reason.

Do I need to make this request different? I'm returning a Json result from the action. Here is the code:

return Json(retval);

Where retval is a list of objects that match the html template parameters elsewhere in the sencha code. Even if that part doesn't match though, I should at least be able to see the alert right?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

你没皮卡萌 2024-11-16 23:15:19

您可能会发出跨域请求,在这种情况下,您必须使用 JSONP。

并且使用 JSONP 使得无法从控制器使用 return Json(object)

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

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

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

You are probably make a cross-domain request, in that case, you must use JSONP.

And using JSONP, makes impossible to use return Json(object) from the controller.

Check the JSONP class in the API. There is a example for ASP.NET.
You can use in JavaScriptSerializer class to serialize an object to JSON.
(In fact, Json method is using this class in the back).

The idea is you have to return something like this:

var myJson = {success:true};
someRandomMethod(myJson); // someRandomMethod is the callback parameter
云淡月浅 2024-11-16 23:15:19

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

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

You are using JSONP, you should use Ext.util.JSON

JSONP works in another way, returning JavaScript instead of JSON.

<逆流佳人身旁 2024-11-16 23:15:19

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

I don't use Sencha/Ext a lot, so I could be way off base here, but shouldn't that be:

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);
  }
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文