PHP / Angular - отладка «неразборчивого ответа» - PullRequest
0 голосов
/ 01 октября 2018

Я смотрю на ошибку на сайте Laravel / PHP, над которым я работаю (я очень новичок в PHP).Кажется, что запись в таблице в форме не удаляется из базы данных при удалении значения из этой ячейки.

Ячейка таблицы записывается в HTML с помощью:

<td class="table__priority-column" [class.loading]="payer.loading" data-heading="RIT" id="reduceWidth-secondPlus">
    <input style="min-width:100px;" type="text" [class.error]="payer.ritAmountError" *ngIf="!payer.loading" [(ngModel)]="payer.ritAmount" (change)="ritAmountChanged(payer)" [attr.disabled]="loadingPayers ? '' : null" />
</td>

Атрибут (change) ячейки таблицы вызывает функцию ritAmountChanged() при обнаружении изменения значения этой ячейки.Эта функция определена в файле условного-напоминания с помощью:

ritAmountChanged(payer)
{
    console.log("ritAmountChanged() called from provisional-reminders.ts (line 487)");
    if( payer.ritAmount === '' || payer.ritAmount === null )
    {
        const errorMessage = new Message();
        errorMessage.type = MessageType.ERROR;
        errorMessage.message = 'Please enter an RIT Amount.';
        this.messagingService.emitMessage(errorMessage);

        this.currentDatePayer = null;

        //return false; /* remove the 'return' statement, to stop the function returning when the RIT value is set to null */
    }

    ...
    this.provService.updateRitEstimate( payer.accountId, payer.ritIncomeYear, payer.ritAmount, filedDate ).subscribe(
        (response:any) => {

            payer.loading = false;

            const message = new Message();
            message.type = MessageType.SUCCESS;
            message.message = response.message || 'Your RIT Estimate has been saved.';
            this.messagingService.emitMessage(message);

            this.currentDatePayer = null;

            if( payer.calculateFromRIT )
            {
                this.calculateAmountFromRIT( payer );
            }
        },
        (error:any) => {

            taxpayer.loading = false;

            const message = new Message();
            message.type = MessageType.ERROR;
            message.message = error.message || 'There was a problem saving the RIT Estimate.';
            this.messagingService.emitMessage(message);

            this.currentDatePayer = null;
        }
    );
}

Функция updateRitEstimate(), вызываемая ritAmountChanged(), которая возвращает ответ, определена в provional.service.ts с:

updateRitEstimate(accountId: number, incomeYear: number, estimate: number, dateFiled?: any): Observable<any> {
    console.log("updateRitEstimate() called ");
    let headers = new Headers({
        'Content-Type': 'application/json'
    });

    let data = {
        "accountId": accountId,
        "incomeYear": incomeYear,
        "estimate": estimate,
        "dateFiled": dateFiled
    };

    console.log("data: ", data);

    return this.http
        .post(this.updateRitUrl, JSON.stringify( data ), {headers: headers})
        .map(this.extractData)
        .catch(this.handleError);
}

Когда я удаляю значение из соответствующей ячейки в записи таблицы, я вижу отладку в консоли (console.log("data: ", data);), показывающую, что значение было установлено в 0, однако сразу после этого я получаюдругое сообщение в консоли, которое гласит:

неразборчивый ответ

Это сообщение не отображается как ошибка, оно отображается так же, как и обычная строка отладки- просто простое сообщение.

Учитывая, что последнее, что отображается в консоли перед этим unparseable response сообщением, это строка отладки console.log("data: ", data);, я подозреваю, что проблема связана с ответом, возвращаемымupdateRitEstimate(...) функция ... но информация внутри переменной data, возвращаемая updateRitEstimate(), кажется верной, за исключением того, что я ожидал, что ячейка, значение которой я удалю, будет nullвместо 0 (если я изменяю значение ячейки на любое другое значение, не равное NULL, я вижу это значение, отображаемое в строке отладки, т.е. estimate: 123).Отладка показывает значение переменной data:

данные: {accountId: 2771, доход год: 2019, оценка: 0, дата заполнена: "8/10/2018"}

В то же время, когда в консоли появляется сообщение unparseable response, в браузере отображается сообщение об ошибке:

Неожиданный токен <в JSON в позиции 0 </p>

Из файла route / web.php я вижу, что функция PHP, используемая для обновления значения, является функцией updateRITEstimate(), определенной в ProvController.php:

public function updateRITEstimate( Request $request )
{
    $accountId = $request->input('accountId');
    $incomeYear = $request->input('incomeYear');
    $estimate = $request->input('estimate');
    $filedDate = $request->input('dateFiled', '');

    $save = $this->saveRITEstimate( $accountId, $incomeYear, $estimate, $filedDate );

    if( $save )
    {
        dd("save() function called, RIT estimate should have been saved/ removed ");
        return response()->json([
            'error' => false,
            'message' => 'RIT Estimate received'
        ]);
    }
    else
    {
        dd("There was an error saving the RIT estimate ");
        return response()->json([
            'error' => true,
            'message' => 'There was an error saving the RIT Estimate'
        ], 500);
    }
}

Как отследить причину сообщения unparseable response, которое я вижу в консоли, и почему значение estimate устанавливается в 0, когда я ожидаю, что оно будет нулевым?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...