Показать сообщение отдельно
  #1 (permalink)  
Старый 27.11.2014, 00:08
Интересующийся
Отправить личное сообщение для ascherbakov Посмотреть профиль Найти все сообщения от ascherbakov
 
Регистрация: 12.03.2014
Сообщений: 20

Отправить массив клиенту в ответ на ajax
Всем привет! Помогите, не могу отправить массив клиенту.
Вот что есть:
1. аякс запрос к серверу:
function QueryItem(ip, code, Start, End) {
        content = $.ajax({
            url: '/result',
            type: 'get',
            data: ({IP: ip, CODE: code, START: Start, END: End}),
            success: function(msg) {
                SetTable(msg);
            }
        }).responseText;
        return;
    }

2. сервер запускает скульную функцию и результат отправляет клиенту:
GetData(res, params, function(rows){
        SendClient(res, rows);
    });

function GetData(res, params, callback) {
    var i = 0;
    var ip = params["p_IP"];
    var code = params["p_CODE"];
    var Start = params["p_START"];
    var End = params["p_END"];
    var tmpConnect = "Driver={SQL Server};Server=" + ip + ";Database=DB;UID=sa;PWD=pwd;";
    odbc.open(tmpConnect, function(err, tmpDB) {

        if (err) {
            return console.log("Error!\n" + err);
        }

        var SQL = "SELECT * FROM [dbo].[ufn_getJornalRealizNew]('" + Start + "', '" + End + "', '" + code + "')";

        tmpDB.query(SQL, function (err, rows, moreResultSets) {

            if (err) {
                return console.log('Error!\n' + err.message);
            }

            tmpDB.close();
            callback(String(rows)); //без явного приведения к строке не прокатывает
        });
    });
}

function SendClient(res, data) {
    res.end(data);
}

3. на клиенте хочется работать уже с массивом, а не со строкой.
понятное дело, что для строки такое не выполнится:
function SetTable(data) {
        alert(data[1].FIO); //undefined
        return;
}

а теперь вопрос: как передать клиенту массив, может заголовки какие надо отправить?
Или вообще в каком-то другом формате отправлять?
При попытке вызвать колбэк из ф-и GetData на сервере вот так:
callback(rows);

вместо
callback(String(rows));

получаю ошибку:
Код:
TypeError: first argument must be a string or Buffer
               at SendClient (c:\www\reports\routes\realiz.js:252:9)
При выводе результатов скульного запроса через console.log, вижу массив объектов, например:
[
{ k_rec: 126768,
FIO: 'ИВАНОВ ИВАН ИВАНОВИЧ',
RequestNo: '12/1-3000/14',
EST_GUID: 'C0DE6E44-C8B8-41AC-BB4B-75F329E318B9',
CostEst: 924,
NdsEst: 166.32,
TotalEst: 1090.32 },
{ k_rec: 126769,
FIO: 'СИДОРОВ СИДР СИДОРОВИЧ',
RequestNo: '12/1-3001/14',
EST_GUID: 'C0DE6E44-C8B8-41AC-BB4B-7535TR8I318B9',
CostEst: 385.26,
NdsEst: 45.62,
TotalEst: 420.88 }
]
Ответить с цитированием