Я смотрю на ошибку на сайте 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, когда я ожидаю, что оно будет нулевым?