2012-07-18 48 views
1

我是新来的ext Js。解码Ajax响应

我有一个ajax调用。我可以看到警报上的响应文本,但下一行(假定解码responseText)不会在警报框中产生任何结果。

我的功能是这样的:

function openToRecipients() 
{ 

    Ext.Ajax.request({ 
     url: "Redirector?id=ClinicalInitiateForm&wfid=CLINICALONGOINGWFINITIATE", 
     method: 'POST',     
      success: function(response, opts) 
      { 
       alert(response.responseText); 
       var dataCurrent = Ext.util.JSON.decode(response.responseText); 
       alert(dataCurrent); 
       var jsonStr = dataCurrent.cData; 
       recipientJsonResponse = dataCurrent.dataGrid; 
       var myObject = eval('(' + jsonStr + ')'); 
       gridStore = new Ext.data.JsonStore({ 
        id : 'gridStore', 
        autoLoad : true, 
        data : myObject, 
        root : 'data', 
        fields:['NAME', 
           'CLIENT', 
           'DESCRIPTION' 
         ], 
        listeners :{ 
         load : gridDisplay 
        } 
       }); 
       }, 
      failure: function(response, opts) { 
       alert("fail"); 
      } 

    }); 

} 

这是coverting串

"formFields" : [ { 
    "id" : "NAME", 
    "set" : "", 
    "label" : "Name", 
    "dataType" : "string", 
    "editType" : "static", 
    "clientConfig" : "", 
    "hide" : "False", 
    "required" : "", 
    "mask" : "", 
    "maxValue" : "", 
    "maxLength" : "", 
    "minValue" : "", 
    "value" : "", 
    "showIf" : "", 
    "options" : "", 
    "prePopulate" : "", 
    "shortForm" : "", 
    "comments" : "", 
    "optionsValue" : "", 
    "currentValue" : "", 
    "disabled" : "", 
    "qTip" : "", 
    "hover" : "" 
    }, { 
    "id" : "CLIENT", 
    "set" : "", 
    "label" : "Client", 
    "dataType" : "string", 
    "editType" : "static", 
    "clientConfig" : "", 
    "hide" : "False", 
    "required" : "", 
    "mask" : "", 
    "maxValue" : "", 
    "maxLength" : "", 
    "minValue" : "", 
    "value" : "", 
    "showIf" : "", 
    "options" : "", 
    "prePopulate" : "", 
    "shortForm" : "", 
    "comments" : "", 
    "optionsValue" : "", 
    "currentValue" : "", 
    "disabled" : "", 
    "qTip" : "", 
    "hover" : "" 
    }, { 
    "id" : "DESCRIPTION", 
    "set" : "", 
    "label" : "Description", 
    "dataType" : "string", 
    "editType" : "static", 
    "clientConfig" : "", 
    "hide" : "False", 
    "required" : "", 
    "mask" : "", 
    "maxValue" : "", 
    "maxLength" : "", 
    "minValue" : "", 
    "value" : "", 
    "showIf" : "", 
    "options" : "", 
    "prePopulate" : "", 
    "shortForm" : "", 
    "comments" : "", 
    "optionsValue" : "", 
    "currentValue" : "", 
    "disabled" : "", 
    "qTip" : "", 
    "hover" : "" 
    } ], 

后,我的JSON和这是我的数据

{'data':[{"NAME":"Shan","CLIENT":"CSC","DESCRIPTION":"Computer science"}]} 

我怎么能有这样的数据在我的网格中

+0

答案是有效的Json?请提供,以便我们可以帮助回答这个问题。 – Brian 2012-07-18 12:39:26

+0

你是否想知道我的json是否有效?是的,这是 – 2012-07-18 12:41:57

+0

重点是要看看,否则我们无法帮助。我在上面的代码中看不到任何明显的错误,所以不可能知道什么是错的。所以发布JSON响应。 – Brian 2012-07-18 12:50:44

回答

1

这里是你可以使用代码:

var myStore = Ext.create("Ext.data.JsonStore", { 
    fields: [ "firstname", "lastname" ], // the fields of each item (table line) 
    proxy: { 
     type: "ajax", // the proxy uses ajax 
     actionMethods: { // this config is not necessary for you. I needed to use it to be able to work with the echo service of jsFiddle. if you want to use post (as I saw in your post, you can skip this) 
      create: "POST", 
      read: "POST", 
      update: "POST", 
      destroy: "POST" 
     }, 
     url: "/echo/json/", // here will come your URL that returns your JSON (in your case "Redirector?id..." 
     reader: { 
      type: "json", // this store reads data in json format 
      root: "items" // the itens to be read are inserted in a "items" array, in you case "formFields" 
     } 
    } 
}); 

// in jsFiddle, we need to send the JSON that we want to read. In your case, you will just call .load() or set the autoLoad config of the store to true. If you want send adition parameters, you can use the sintax below. 
myStore.load({ 
    params: { 
     // everything inside the encode method will be encoded in json (this format that you must send to the store) 
     json: Ext.encode({ 
      items: [{ 
       "firstname": "foo", 
       "lastname": "bar" 
      }, { 
       "firstname": "david", 
       "lastname": "buzatto" 
      }, { 
       "firstname": "douglas", 
       "lastname": "adams" 
      }] 
     }) 
    } 
}); 

// creatin the grid, setting its columns and the store 
Ext.create("Ext.grid.Panel", { 
    title: "My Grid", 
    columns: [{ 
     header: "First Name", 
     dataIndex: "firstname" // the dataIndex config is used to bind the column with the json data of each item 
    }, { 
     header: "Last Name", 
     dataIndex: "lastname" 
    }], 
    store: myStore,   // the store created above 
    renderTo: Ext.getBody() // render the grid to the body 
}); 

你可以在这里访问小提琴:http://jsfiddle.net/cYwhK/1/ 文档:

另一个人认为我忘记告诉你可以在你的商店中使用模型而不是字段数组。模型就像一个面向对象语言的类。看看:http://dev.sencha.com/deploy/ext-4.1.0-gpl/docs/index.html#!/api/Ext.data.Model

+0

:感谢您的帮助,并感谢您的帮助 – 2012-07-19 07:07:34

+0

@ Jaisri_88,不客气。现在我需要睡觉。现在是巴西的上午4点。当我醒来时,我会看看帖子,看看你是否能够解决你的问题(我想你会的)。看到你和好运;) – davidbuzatto 2012-07-19 07:10:08

+0

@ david:唐知道如何谢谢你,一直在挣扎。你的例子真的帮了我。由于我是新来的,所以我甚至知道如何去问我的疑惑。成为我的Ext js导师;) - – 2012-07-19 09:32:29