jquery — php, чтобы заморозить перед совершением транзакции?

Я хочу, чтобы php завис перед передачей транзакции, чтобы я отображал журнал обновлений для пользователя ПЕРЕД фиксацией транзакции и предоставляю возможность продолжить или выполнить откат.

Это код, который фиксирует обновления в базе данных: —

<?php
include 'submitLogger.php';

// Begin logging
ini_set( "error_log", $logFile );
ini_set( "log_errors", "On" );
ini_set( "display_errors", "Off" );
error_log( "Log file '" . $logFile . "' created" );

// Open the database
.
.

error_log( "Connect OK" );
.
.

error_log( "Transaction started (autocommit OFF)\n" );
.
.

error_log( "Processing " . count( $deletes ) . " item(s) marked for deletion..." );
.
.// commit changes
error_log( "Committing changes..." );
if ( mysqli_commit( $link ) === false ) {
mysqli_rollback( $link );
error_log( "Commit failed. Transaction rolled back." );
$response['error'] = "Could not commit changes. Transaction rolled back.";
} else {
error_log( "Commit successful!" );
$response['success'] = "Success!";
}

// close DB connection
.
.

// Return result
.
.

Это код, который загружает код обновления выше и затем отображает файл журнала, но ПОСЛЕ того, как транзакция была совершена:

<script type="text/javascript">

$(document).ready( function() {// send AJAX request to perform the updates and begin logging
$.post(
'../lib/updateMenu.php',
sendData,
function( response ) {
// was it successful?
if ( typeof response.success === 'undefined' ) {
// no - show alert
if ( response.error ) {
alert( response.error );
}
console.error( "Amend not successful" );
console.error( response );
return;
}

// delete the AmendmenuAmendselected program window to force a reload on next click
$( "#programWindowAmendmenuAmendselected" ).remove();
},
"json").error(function(jqXHR, textStatus, errorThrown) {
alert( 'Unexpected error: ' + textStatus + ' ' + errorThrown );
console.error( 'Unexpected error during amend: ' + textStatus + ' ' + errorThrown );
console.error(jqXHR);
}).complete(function() {
// once a reply is received, stop the logging
ajaxLogtail.stopTail();
});

// begin querying log file
var ajaxLogtail = new AjaxLogtail( '../lib/ajaxLogtail.php?logfile=' + logFile, "programWindowAmendmenuSubmit" );
ajaxLogtail.startTail();
});

</script>

Как я могу сказать php-коду дождаться ответа от внешнего интерфейса, прежде чем он совершит транзакцию?

У кого-нибудь есть хорошая идея, чтобы помочь, пожалуйста?

0

Решение

Поскольку это невозможно, как вы пытаетесь в настоящее время, я дам вам решение, как решить проблему.

Я хотел бы, чтобы мой сценарий запускал внешний процесс, или, скорее, постоянный процесс или рабочий (например, gearman). Это будет рабочий, который создаст транзакцию и вернет ответ на мой основной скрипт, чтобы дать отзыв пользователю.

Рабочий экземпляр должен быть записан, чтобы его можно было продолжить позже. Когда пользователь подтверждает, следующее выполнение запроса будет повторно подключено к работнику, который скажет ему либо зафиксировать, либо выполнить откат.

Хотя червь должен следить за продолжительностью жизни транзакции, если пользователь слишком долго ждет, соединение с базой данных может закрыться.

0

Другие решения

Других решений пока нет …