2016-12-06 25 views
0

私のアプリケーションには、バインディングまたはform.getForm()。loadRecord()メソッドを使用して入力されたフォームがあります。jsonレスポンスajaxリクエストから直接データを取得する方法

このフォームには、Ext.Ajax.requestの応答から直接入力する2つのフィールドが動的に追加されます。

json応答ajaxリクエストから直接データを取得する最も良い方法は何ですか?

Ext.Ajax.request({ 
    url: 'php/read', 
    method: 'POST', 
    params: { 
    'myId': myId, 
    }, 
    success: function (conn, response, options, eOpts) { 

     var one = //get directly from request response (json) //???? 

    }, 
    failure: function (conn, response, options, eOpts) { 
    } 
}); 

var one = //get directly from request response (json) //??? 
var two = ... 

Ext.ComponentQuery.query('#fieldOne')[0].setValue(one); 
Ext.ComponentQuery.query('#fieldTwo')[0].setValue(two); 

。応答データを取得するには

編集

//json 
data:{ 
    one: "A", 
    two: "B" 
} 

success: function (response, options) { 
    var resp = Ext.decode(response.responseText); 
    //or 
    var resp2 = response.responseText; 
} 

RESPで、私が得る:

Object 
    success: Object 
    data: Array[1] 

RESP2で私が取得:

{"success":{"success":true},"data":[{"one":"A","two":"B"}]} 

これは次のようにデータにアクセスすることになった。

resp.one 
//or 
resp2.one 
//or 
resp.data.one 

しかし、それは未定義 'を返します。

「1つの値」を得るには何が欠けていますか?

+1

'data'は配列です。 'resp.data [0] .one'です。 –

+0

ありがとうエヴァン。あなたのソリューションは私の問題を解決します。 – josei

答えて

2

成功コールバックがデータを返すと関数を呼び出す必要があります。これは単に一例であり、あなたが必要と正確に動作しない場合がありますが、それは私が何を意味するかを紹介します:あなたが返すようにコールバック関数を待っているので

Ext.Ajax.request({ 
    url: 'php/read', 
    method: 'POST', 
    params: { 
     'myId': myId, 
    }, 
    success: function(conn, response, options, eOpts) { 
     setFields(response); 
    }, 
    failure: function(conn, response, options, eOpts) {} 
}); 

function setFields(response) { 
    Ext.ComponentQuery.query('#fieldOne')[0].setValue(response.one); 
    Ext.ComponentQuery.query('#fieldTwo')[0].setValue(response.two); 
} 

、あなたが設定することはできませんあなたの変数。だから、上記のことが起こる必要があるのです。あなたはコールバック内でそれを行うこともできますが、関数はより洗練されています。

+0

ありがとう、ジェレミー。それは動作していません。私は 'undefined'を返すsucess関数の中でconsole.log(response.one)を使ってテストを試みました – josei

+0

まあ、そうです。私はそれが一例だと言った。あなたは少しデータを再生する必要があります。レスポンスをログアウトしてみてください –

+0

私の投稿を編集しました – josei

関連する問題