Ответ PHP на обратный вызов AJAX, выводящий на экранJquery

Программирование на jquery
Ответить
Anonymous
 Ответ PHP на обратный вызов AJAX, выводящий на экран

Сообщение Anonymous »

Я столкнулся с действительно странной проблемой, когда мой метод php отправляет обратно ответ json после успешного сохранения записи в базе данных, но ответ печатается на экране, а не отправляется обратному вызову Ajax. Это приводит к сбою обратного вызова Ajax и последующего кода. Тот же код с теми же подписями методов и ответами работает для других классов, но не работает для этого экземпляра.
Это jQuery, который запрашивает действие публикации:

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

$(document).ready(function() {
validateForm();

$('#addOrganisationForm').on('submit', function(e) {
e.preventDefault();
if ($(this).valid()) {
const formData = {
name: $('#name').val(),
websiteUrl: $('#websiteUrl').val(),
description: $('#description').val(),
industry: $('#industry').val(),
};
sendCreateOrganisationRequest(formData);
} else {
console.log('Form validation failed.');
}
});
});

function sendCreateOrganisationRequest(formData) {
console.log('Sending request...');
$.ajax({
url: '/organisations/create',
type: 'POST',
contentType: false,
processData: false,
data: formData,
success: function(response) {
if (response.success) {
console.log('Organisation created successfully!');
if (isAuthenticated) {
window.location.href = '/organisations/getAll';
} else {
alert('Organisation created successfully!');
$('#addOrganisationForm')[0].reset();
}
} else {
processErrors(response.error);
}
},
error: function(xhr, status, error) {
console.error('Failed request:', status, error);
let response = JSON.parse(xhr.responseText);
processErrors(response.error);
}
});
}
Это метод createOrganisation:

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

public function createOrganisation(string $name, string $description, string $websiteUrl, string $industry): void
{
try {
$duplicates = $this->organisationMapper->checkDuplicate($name, $websiteUrl);

if (!empty($duplicates)) {
renderJson(['error' => $duplicates], 400);
return;
}
$organisation = new Organisation();
$organisation->setName($name);
$organisation->setDescription($description);
$organisation->setWebsiteUrl($websiteUrl);
$organisation->setIndustry($industry);
$organisationSaved = $this->organisationMapper->save($organisation);
renderJson(['success' => $organisationSaved], $organisationSaved ? 200 : 404) ;
} catch (Exception $e) {
renderJson($e->getMessage(), 500);
}
}
Это метод рендеринга json, используемый для отправки ответа.

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

// Helper method to send json responses
function renderJson(array | string $data, int $statusCode): void
{
header('Content-Type: application/json');
http_response_code($statusCode);
echo json_encode($data);
}
Я пробовал отладку с помощью операторов print_r и error_log и не смог найти причину, по которой ответ печатается вместо отправки ответа непосредственно в обратный вызов Ajax.
Я также пробовал менять, используя if/else и присваивание переменных с явной проверкой типа в методе контроллера вместо троичного, но ничего не изменилось.>

Подробнее здесь: https://stackoverflow.com/questions/789 ... -to-screen
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Jquery»