Страница 1 из 1

ответ от ККМ

Добавлено: 27 фев 2017, 16:51
Logger
Для определения распечатан чек/не распечатан (нужно для внесения/не внесения в базу) делаю так:

Код: Выделить всё

let resultComm = ExecuteCommand(Async, Data);
let resultCommand = JSON.parse(resultComm);
console.log(resultCommand);
Вижу это:

Код: Выделить всё

Uncaught SyntaxError: Unexpected token u in JSON at position 0
    at JSON.parse (<anonymous>)
Ошибку выдает на строке JSON.parse(resultComm);

Если не парсить ответ от сервера, а выводить сразу, то выдает undefined.
Чек распечатывается корректно, лицензия оплачена.

Re: ответ от ККМ

Добавлено: 27 фев 2017, 18:56
Audim
Как я понимаю JavaScript ?
И функция "ExecuteCommand" из моих примеров?
Тогда смотрите:

В этой функции 3 параметр - функция обработки ответа.
Если она не задана то ответ обрабатывает функция "ExecuteSuccess".

Вы можете реализовать обработку ответа 2 способами:
1. Изменить функцию "ExecuteSuccess"
2. Передать в функцию "ExecuteCommand" 3-им параметром функцию - обработчик ответа.
Например:

Код: Выделить всё

ExecuteCommand(Async, Data, 
   function(Rezult, textStatus, jqXHR) { 
         alert( Rezult.Status ); 
   }
);
Где "Rezult" это уже объект - пропарсенный автоматом JSON ответа

Надеюсь понятно объяснил?

Re: ответ от ККМ

Добавлено: 28 фев 2017, 12:23
Logger
Да, нативный js.
ExecuteCommand из Ваших примеров.
А объект Rezult откуда берется? Просмотрел мануалы, не совсем понял.
textStatus тоже не понял откуда брать

Re: ответ от ККМ

Добавлено: 28 фев 2017, 14:05
Audim
А объект Rezult откуда берется? Просмотрел мануалы, не совсем понял.
textStatus тоже не понял откуда брать

Эти три параметра Вам передаст $.ajax!
$.ajax вызовет эту переданную вами функцию после получения ответа от сервера с заполненными этими параметрами.

Курите документацию по JQuery: http://jquery.page2page.ru/index.php5/A ... 0%BE%D1%81

Re: ответ от ККМ

Добавлено: 28 фев 2017, 14:11
Logger
Я уже все на нативный js перевел)
Получается нужные данные в this.responseText будут?
if (this.readyState == 4 && this.status == 200) {
this.responseText;
}

Re: ответ от ККМ

Добавлено: 28 фев 2017, 14:39
Audim
Я уже все на нативный js перевел)
Я не специалист в js. Что значит "на нативный"?
Имеется в виду "Без библиотеки JQuery"?

Получается нужные данные в this.responseText будут?
if (this.readyState == 4 && this.status == 200) {
this.responseText;
}

А можно код посмотреть? А то так не понятно.

Re: ответ от ККМ

Добавлено: 28 фев 2017, 15:54
Logger
нативный/ванильный js - js без библиотек/фреймворков.
Я тоже не айс специалист в js) Но Кантор, например (javascript.ru), считает, что jquery не нужен совсем. Да и с jquery не совсем понятно, что происходит.
Весь код:

Код: Выделить всё

function ExecuteCommand(Async,          
                        Data,           
                        FunSuccess,     
                        FunError,       
                        timeout) {

    if (FunSuccess === undefined) {
        FunSuccess = ExecuteSuccess;
    }
    if (timeout === undefined) {
        timeout = 60000;
    }
    var jsonData = JSON.stringify(Data);
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
            //console.log(this.responseText);
        } else {
        }
    };
    xhttp.open("POST", UrlServer + ((UrlServer == "") ? window.location.protocol + "//" + window.location.host + "/" : "/") + 'Execute/' + ((Async) ? "async" : "sync"), true);
    xhttp.setRequestHeader("Authorization", "Basic " + btoa(User + ":" + Password));
    xhttp.send(jsonData);
}

function ExecuteSuccess(Rezult, textStatus, xhttp) {
    if (Rezult.Status == 0) {
        MessageStatus = "Ok";
    } else if (Rezult.Status == 1) {
        MessageStatus = "Выполняется";
    } else if (Rezult.Status == 2) {
        MessageStatus = "Ошибка!";
    } else if (Rezult.Status == 3) {
        MessageStatus = "Данные не найдены!";
    }
    MessageError = Rezult.Error;

    // Номер чека
    var MessageCheckNumber = Rezult.CheckNumber;
    // Номер смены
    var MessageSessionNumber = Rezult.SessionNumber;
    // Количество символов в строке
    var MessageLineLength = Rezult.LineLength;
    // Сумма наличных в ККМ
    var MessageAmount = Rezult.Amount;
}

Re: ответ от ККМ

Добавлено: 28 фев 2017, 18:27
Audim
Замените это:

Код: Выделить всё

function () {
        if (this.readyState == 4 && this.status == 200) {
            //console.log(this.responseText);
        } else {
        }
    };
на это (помойму это должно быть так):

Код: Выделить всё

function () {
        if (xhttp.readyState == 4 && xhttp.status == 200) {
            //console.log(xhttp.responseText);
        } else {
        }
    };

Re: ответ от ККМ

Добавлено: 28 фев 2017, 22:48
Logger
this в данном случае ссылается на текущий экземпляр класса, т.е. xhttp, они равнозначны.
Во всяком случае на w3c в примере используется именно this