使用ajax从Web服务获取数据

时间:2014-02-20 09:15:02

标签: ajax extjs extjs4.1 extjs4.2 extjs-mvc

我正在尝试使用ajax和POST方法从Web服务获取数据。

Ext.Ajax.request({
url: 'http://localhost......',
method:'POST',
   success: function(response) { console.log(response.responseText); },
  failure: function() { Ext.Msg.alert('Fail'); },
  jsonData:{ 
      /*Here I specify my request json*/
    }
}
  });

上面的工作正常但是当我尝试在EXTJS商店中模仿相同时它会回复错误 服务器响应状态为415(不支持的媒体类型)

EXTJS STORE CODE

Ext.define('IWM.store.JsonTest', {

    extend: 'Ext.data.Store',
    autoLoad: true,

    fields:['Name'],

    proxy: {

        type: 'ajax',
        method : 'POST',
        actionMethods: {
            create : 'POST',
            read   : 'POST',
            update : 'POST',
            destroy: 'POST'
        },
        jsonData:{
            /*JSON */
            }
        },
        url: 'http://localhost......',

        success: function(response) { console.log(response.responseText); },

        failure:function(){console.log("failed");},

        reader: {

            type: 'json',

            root: 'result',

            successProperty: 'success'

        }

    }

});

2 个答案:

答案 0 :(得分:1)

首先,尝试更改商店配置,如下所示。

var IWMStore = new Ext.data.JsonStore({
   // it seems to me you had forgotten model
    model: 'YourDataModel',
    autoLoad: true,
    proxy: {
        type: 'ajax',
        url: 'http://your-url-address',
        reader: {
            type: 'json',
            root: 'json-root-value',
            idProperty: 'unique-property-in-json-file'
        }
    }
});

示例JSON值:

// here, ctgMains is the root value, CUST_ASSORT_SECTION_ID is the idProperty
{"ctgMains":[{"CUST_ASSORT_SECTION_ID":"1","CTG_SECTION":"HORECA"},{"CUST_ASSORT_SECTION_ID":"7","CTG_SECTION":"SCO"},{"CUST_ASSORT_SECTION_ID":"3","CTG_SECTION":"TRADER"}]}

第二次尝试: 尝试在代理定义中添加headers属性,如下所示:

        proxy: {
            type: 'ajax',
            url: 'http://your-url-address',
            reader: {
                type: 'json',
                root: 'json-root-value',
                idProperty: 'unique-property-in-json-file'
            },
            headers: {
                'Content-type': 'application/json',
                'Accept': 'application/json'
            }
        }

答案 1 :(得分:0)

根据OğuzÇelikdemir的回答,你可能需要为你的代理定义一个json writer。

proxy: {
    type: 'ajax',
    url: 'http://your-url-address',
    reader: {
        type: 'json',
        root: 'json-root-value',
        idProperty: 'unique-property-in-json-file'
    },
    writer: {
        type: 'json'
    }
}

那应该设置json mediatype标头(假设这是你的请求所期望的)。