2016-12-06 6 views
0

Мое приложение имеет форму, заполненную связыванием или методы form.getForm(). LoadRecord().Как получить данные непосредственно из json-ответа ajax-запрос

К этой форме динамически добавляются два поля, которые я хочу заполнить непосредственно из ответа Ext.Ajax.request.

Каков наилучший способ получить данные непосредственно из запроса json response 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" 
} 

EDITED

Для получения данных ответа:

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

С соответственно, я получаю:

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

'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

Спасибо Джереми. Это не работает. Я попробовал тестирование с помощью console.log (response.one) внутри функции sucess, которая возвращает «undefined» – josei

+0

Ну, да. Я сказал, что это пример. Возможно, вам придется немного поиграть с данными. Попробуйте вывести 'response' –

+0

Я отредактировал мой пост – josei

Смежные вопросы