使用 ajax 从 Web 服务获取数据

Posted

技术标签:

【中文标题】使用 ajax 从 Web 服务获取数据【英文标题】:Getting data from web service using ajax 【发布时间】:2014-02-20 09:15:01 【问题描述】:

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

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 商店代码

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'

        

    

);

【问题讨论】:

你的网络服务器是什么?阿帕奇或IIS!另外,发布您的服务器端代码,特别是返回值部分。 服务器是 apache。服务器正确地为我提供了一个 json。 【参考方案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'
            
        

【讨论】:

我仍然收到同样的错误“不支持的媒体类型” 发布您返回的 json 和模型定义。 No :( 不工作错误仍然存​​在。我什至收到错误指定“没有找到匹配请求路径/ActionflowResponse 的操作,HTTP 方法:POST,ContentType:application/json,application/ x-www-form-urlencoded;charset=UTF-8, Accept : application/json' 您确定在浏览器控制台中看到 json 值吗?如果是这样,请将此 json 粘贴到此处。 只有当我使用 Ext.Ajax.Request 方法时,我才能看到 json。但在商店中我无法在控制台中看到 json【参考方案2】:

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

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 标头(假设这是您的请求所期望的)。

【讨论】:

以上是关于使用 ajax 从 Web 服务获取数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 Jquery AJAX 从 ASP.NET Web 服务器获取对象

ajax功能完成后socket.io连接

在回流中,我如何从 asp.net web api 获取数据

AJAX 跨域请求 - JSONP获取JSON数据

AJAX 跨域请求 - JSONP获取JSON数据

如何使用Ajax从FastReport Web API获取报表