【问题标题】:ExtJS 3.4 callback function after ajax requestajax请求后的ExtJS 3.4回调函数
【发布时间】:2015-06-10 14:49:05
【问题描述】:

我有一家商店:

var store = new Ext.data.JsonStore({
        root: 'list',
        url: '../myProject/getData.ajax',
        baseParams:{
            date:'',
        },
        fields: rec,
        totalProperty:'totalCount',
        pruneModifiedRecords:true,
        autoLoad : false,   
        listeners:{
            load:function(){
                globalMask.hide();
            }
        } 
    });

按下按钮后,我使用功能加载商店:

function storeLoad(){
    store.baseParams =  {
            date:date.getRawValue(),
        },
    store.load({
        params  :{start:0, limit:100},
        callback: function (response,options,success) {
                    if (success){
                        var res =  Ext.util.JSON.decode(response.responseText); 
                        if(res.msj != null){
                        Ext.MessageBox.alert("Sonuç",res.msj);

                        }
                    } else{
                        Ext.MessageBox.alert("Error","Error message : "+response.statusText+". Try again later!!! ");
                    }
                    console.log("response:"+response);
                    console.log("op:"+options);
                    console.log("success:"+success);
                    console.log("res:"+res);
                    console.log("res.mesaj:"+res.msj);
            }

    });
}

然后在控制台中返回如下:

响应:[object Object],[object Object],[object Object],[object 对象],[对象对象],[对象对象],[对象对象],[对象 对象],[对象对象],[对象对象],[对象对象],[对象 对象],[对象对象],[对象对象],[对象对象],[对象 对象],[对象对象],[对象对象],[对象对象],[对象 对象],[对象对象],[对象对象],[对象对象],[对象 对象],[对象对象],[对象对象],[对象对象],[对象 对象],[对象对象],[对象对象],[对象对象],[对象 对象],[对象对象],[对象对象],[对象对象],[对象 对象],[对象对象],[对象对象],[对象对象],[对象 对象],[对象对象],[对象对象],[对象对象],[对象 对象],[对象对象],[对象对象],[对象对象],[对象 对象],[对象对象],[对象对象],[对象对象],[对象 对象],[对象对象],[对象对象],[对象对象],[对象 对象],[对象对象],[对象对象],[对象对象],[对象 对象],[对象对象],[对象对象],[对象对象],[对象 对象],[对象对象],[对象对象],[对象对象],[对象 对象],[对象对象],[对象对象],[对象对象],[对象 对象],[对象对象],[对象对象],[对象对象],[对象 对象],[对象对象],[对象对象],[对象对象],[对象 对象],[对象对象],[对象对象],[对象对象],[对象 对象],[对象对象],[对象对象],[对象对象],[对象 对象],[对象对象],[对象对象],[对象对象],[对象 对象],[对象对象],[对象对象],[对象对象],[对象 对象],[对象对象],[对象对象],[对象对象],[对象 对象]

op:[object 对象]

成功:真

回复:

res.msj:未定义

我该如何处理?为什么不能解码响应?我想在成功后加载商店,但商店自己加载。如何使用回调成功和失败? store root 是真的,它会加载,但成功或失败后我无法加载它?

【问题讨论】:

  • 您从服务器获得的实际 JSON 响应是什么?
  • 一个带有 'list' 键的 json 数组。 ["list":[所有数据],"success":true/false,"totalCount":110,"msj":"Done/Error"]
  • 尝试通过jsonlint.com运行您的JSON响应
  • 在浏览器控制台窗口中查看您的 json 响应?将其复制并粘贴到该站点上的大文本框中,然后它将验证您的 JSON 并让您知道是否有任何错误。如果您的 JSON 无效,则无法正确解码
  • 它是有效的,因为网格显示它是真的。仅在回调中不解码。

标签: ajax extjs store


【解决方案1】:

您的回调函数中的响应参数不是来自服务器的 json 响应。这是加载记录的数组,查看documentation

【讨论】:

  • 如果不是json响应,如何正确加载网格行?我确信响应是一个 json 数组。响应为:["list":[所有数据],"success":true/false,"totalCount":110,"msj":"Done/Error"]
  • Reader 解码 JSON 并在 store 中生成数据,回调函数接收此数据。你想在回调函数中做什么。
  • 我写了上面的代码。我想在回调接收到数据后加载存储并向用户发出一些我无法解码的消息。
【解决方案2】:

在 store 的 reader 中添加 Ext.data.DataReader.messageProperty = "msj",查看 documentation 的第一个示例并在 store 的 listener "load" 中添加 alert。

【讨论】:

    【解决方案3】:

    不要将 console.log 与字符串和对象一起使用。尝试使用 console.log(response) 而不是 console.log("response:"+response);

    在你的控制台日志中试试这个你会明白的:

    执行:

    变种测试 = {a:1, b:2, c:3};

    执行:

    控制台.log(测试);

    输出:

    对象{a:1,b:2,c:3}

    执行:

    console.log("响应" + 测试);

    输出:

    响应[对象对象]

    如果您这样做,您将能够导航对象。也许你的代码已经是正确的了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-24
      • 1970-01-01
      • 1970-01-01
      • 2013-03-28
      • 2011-07-25
      • 2011-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多