Abdul Rehman Yawar Khan
Abdul Rehman Yawar Khan

Reputation: 1087

Sencha Rest Proxy not able to access Data available on Localhost:3000 (Redmine)

This is my model

 Ext.define('ThemeApp.model.peopleModel', {
    extend: 'Ext.data.Model',

    fields: [
        { name: 'id' },

        { name: 'subject' },

        { name: 'description'}
    ],

    proxy: {
        type: 'rest',
        format: 'json',
        limitParam:"",
        filterParam: "",
        startParam:'',
        pageParam:'',
        url:'http://localhost:3000/issues/1',
        /*
        api: {
    read  : 'http://localhost:3000/issues'

},*/

        headers: {'Content-Type': "application/json" },
        //url : 'http://api.soundcloud.com/tracks?q=allah%20dita%20rehman%20khan&client_id=0b19b8dc2526b43eae19f03b2eab6798&format=json&_status_code_map[302]=200',

        reader: {
        type: 'json',
        rootProperty:'issues'
        },
        writer: {
            type: 'json'
        }

    }});

This is my store:

Ext.define('ThemeApp.store.peopleStore', {
extend: 'Ext.data.Store',

    model: 'ThemeApp.model.peopleModel',
    storeId: 'peopleStore',
    pageSize: 500,

    autoLoad: true });

All I am trying to do is to fill this grid using Rest proxy, and to test GET and POST methods of rest proxy. I was able to ready soundcloud api using this application but when I tried to read Redmine issues (localhost:3000/issues.xml) I am getting this error:

Chrome Console Error

http://localhost:3000/issues.json just Look like http://www.redmine.org/issues.json only with lesser data. Also Localhost:300/issue.json do exsist !

Any Idea ?

Upvotes: 0

Views: 234

Answers (2)

Holger Just
Holger Just

Reputation: 55718

You are trying to perform CORS requests against the Redmine API. Unfortunately, Redmine currently doesn't support CORS, so this is not possible without further infrastructure changes (which might compromise security if done incorrectly).

There are plugins adding CORS headers to Redmine reponses, but from what I have seen yet, they do not fully ensure a secure system yet.

Given these restrictions, your requests to Redmine will only be valid if your ExtJS app is served from the same host and port as Redmine so that it runs in the same origin and thus works without any explicit CORS support. You could enable this by using a proxy server (e.g. nginx) before both Redmine and the static files of your ExtJS app so ensure the same origin.

Upvotes: 1

Lorenz Meyer
Lorenz Meyer

Reputation: 19895

http://localhost:3000/issues.json

exists, but

http://localhost:3000/issues/1.json

does not exist.

In order to get a rest api to work, you need to use url rewriting.

If you have a flat .json file, you should not use a rest proxy but a json proxy, and you will not have this problem.

Upvotes: 0

Related Questions