ExtJs загружает данные - PullRequest
       8

ExtJs загружает данные

1 голос
/ 29 октября 2011

Я пытаюсь загрузить данные из imdb, но у меня нет результатов в таблице (GridPanel). Это мой исходный код:

...
<body>
<script type="text/javascript">
 Ext.onReady(function(){

var store1 = new Ext.data.JsonStore({
    root: 'root',
    idProperty: 'ID',
    remoteSort: true,
    fields: [
        'Title'
    ],
    // load using script tags for cross domain, if the data in on the same domain as
    // this page, an HttpProxy would be better
    proxy: new Ext.data.ScriptTagProxy({
        url: 'http://www.imdbapi.com/?t=True%20Grit'
    })
});
 // building grid panel
});
</script>
<div id="topic-grid"></div>
...

Может быть, мне следует изменить параметр 'root' в JsonStore?


UPDATE

Я пытался использовать HttpProxy, но все равно безрезультатно. Я положил все свое тело, может быть, это будет более полезным.

<script type="text/javascript">
Ext.onReady(function(){

var store1 = new Ext.data.JsonStore({

    reader: new Ext.data.JsonReader({
        fields: ['Title'],
        root: 'rows'
        }),

    // load using script tags for cross domain, if the data in on the same domain as
    // this page, an HttpProxy would be better
    proxy: new Ext.data.HttpProxy({
        url: 'http://www.imdbapi.com/?t=True%20Grit'
    }),
    autoLoad: true
  });

var grid1 = new Ext.grid.GridPanel({
    width:700,
    height:500,
    title:'ExtJS.com - Browse Forums',
    store: store1,
    trackMouseOver:false,
    disableSelection:true,
    loadMask: true,

    // grid columns
    columns:[{
        id: 'Title', 
        header: "Topic",
        dataIndex: 'Title',
        width: 420,
        sortable: true
    }]
});


// render it
grid1.render('topic-grid');

// trigger the data store load
store1.load({params:{start:0, limit:25}});
});
</script>
<div id="topic-grid"></div>

1 Ответ

3 голосов
/ 29 октября 2011

Вы не можете получить JSON напрямую из ответа при использовании ScriptTagProxy. Вы можете получить только исполняемый javascript, и, к сожалению, сайт imdbapi не возвращает исполняемый javascript. Кроме того, вы не можете использовать HttpProxy для создания межсайтовых сценариев (XSS). Вы можете устанавливать соединения только с ресурсами (например, файлами) в своем локальном домене.

Одна возможность для вас:

  1. Настройте файл на стороне сервера в своем собственном домене, к которому будет подключаться ваш прокси.
  2. Вместо ScriptTagProxy используйте HttpProxy, который связывается с вашим файлом на стороне сервера.

    proxy: new Ext.data.HttpProxy({
        url: '/path/to/my/server/file?t=True%20Grit'  // the leading slash in 
                                                      // this url will begin from
                                                      // your web server's root
                                                      // directory for your
                                                      // web-accessible files
    })
    
  3. Сделайте, чтобы ваш файл на стороне сервера выполнял вызов API imdb от имени клиента и выводил результаты API imdb в виде JSON обратно на клиент.

    myServerSideFile
    ================
    
    // harvest GET parameters, e.g., in your case, the query param 't' with value
    // True%20Grit
    
    // use the GET parameters to form a url with the GET params on the end, e.g.,
    // in your case, http://www.imdbapi.com/?t=True%20Grit
    
    // call the imdb api using this url
    
    // return the imdb api results as a JSON
    

См. this для более подробной информации и примеров выполнения вышеуказанного предложения в различных серверных технологиях.

...