【问题标题】:Ajax json data not being loaded into datastoreAjax json 数据未加载到数据存储中
【发布时间】:2011-09-02 14:23:01
【问题描述】:

当我在数据存储中有一个“data: ...raw json”的配置成员时,我的数据存储可以工作,但是当我尝试通过 ajax 加载它时它不起作用。

 new Ext.data.Store({
        model: "SearchResult",
        proxy: {
            type: "ajax",
            url : "test.php",
            extraParams : 'test',
            reader: {
                type: "json",

            }
        },

    });

注意:test.php 会根据 chrome 被调用并回显:

{stock: 'Tommy', storePhone: '353535', year: '1984', make: 'Ferrari', trim: 'trim', miles: '12345', storename: 'branch name' },{stock: 'Tommy', storePhone: '353535', year: '1984', make: 'Ferrari', trim: 'trim', miles: '12345', storename: 'branch name' },{stock: 'Tommy', storePhone: '353535', year: '1984', make: 'Ferrari', trim: 'trim', miles: '12345', storename: 'branch name' }

任何想法我做错了什么?

【问题讨论】:

  • 你能提供你的模型的代码吗?您如何确定它不起作用 - 是否引发异常?尝试为您的商店注册一些异常处理程序。尝试在调试器中单步执行存储加载代码。
  • 我知道模型是正确的,因为当我使用“数据:”配置参数将 json 数据手动放入数据存储区时,一切正常。我已经确定代码不起作用,因为数据应该加载到列表中并且它没有出现。我不精通异常处理程序,chrome调试控制台中似乎没有错误。谢谢。

标签: extjs


【解决方案1】:

注意:test.php 根据 chrome 被调用并回显:
{股票: “汤米”,storePhone:“353535”,年份:“1984”,品牌:“法拉利”,修剪: 'trim',英里:'12345',商店名称:'分行名称'},
{股票:“汤米”, storePhone:'353535',年份:'1984',品牌:'Ferrari',trim:'trim', 英里:'12345',商店名称:'分行名称'},
{股票:“汤米”, storePhone:'353535',年份:'1984',品牌:'Ferrari',trim:'trim', 英里:'12345',商店名称:'分行名称'}

方括号在哪里?对于您商店的配置,响应应如下所示

// Notice the square brackets
[
  {stock: 'Tommy', storePhone: '353535', year: '1984', make: 'Ferrari', trim: 'trim', miles: '12345', storename: 'branch name' }, 
  {stock: 'Tommy', storePhone: '353535', year: '1984', make: 'Ferrari', trim: 'trim', miles: '12345', storename: 'branch name' }, 
  {stock: 'Tommy', storePhone: '353535', year: '1984', make: 'Ferrari', trim: 'trim', miles: '12345', storename: 'branch name' }
]

【讨论】:

    【解决方案2】:

    您是否在 php 中将数据编码为 json? 像这样 echo json_encode($data); 要么是这样,要么模型与响应完全不同。

    json 格式应该是这样的

    {'success':true,'values':[{stock: 'Tommy', storePhone: '353535', year: '1984', make: 'Ferrari', trim: 'trim', miles: '12345', storename: 'branch name' },{stock: 'Tommy', storePhone: '353535', year: '1984', make: 'Ferrari', trim: 'trim', miles: '12345', storename: 'branch name' },{stock: 'Tommy', storePhone: '353535', year: '1984', make: 'Ferrari', trim: 'trim', miles: '12345', storename: 'branch name' }]}
    
    
    reader:{
                        type: 'json',
                        root: 'values',
                    }
    

    【讨论】:

    • 回显的数据是json格式。我知道模型是正确的,因为当我使用“数据:”配置参数将 json 数据手动放入数据存储区时,一切正常。
    【解决方案3】:

    您的 JSON 需要一个“数据”包装器:

    {"data":[... your JSON ...],"total":9999999,"success":true}
    

    【讨论】:

    • 不,他没有。他没有指定记录的root 配置。文档说By default the natural root of the data will be used. The root Json array
    • 是的,但他仍然需要 [] 括号......否则它不会是一个 json 数组
    • @nscrob,当然。我的意思只是You need a "data" wrapper 部分。
    • 无论如何 .. 任何一个答案都可以解决他的问题 .. 我把他们称为 Up
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多