Я посылаю $.ajax()
редактировать/обновить запрос для редактирования записей группы, которая должна отображать данные в формате JSON (render :json, @data.to_json
) Я только получаю объект XOR на проверяя Ajax успех.Rails4: Ajax.Request (редактировать) не возвращающие данные
Данные правильно настроены на сервере, но в функции обратного вызова успеха указано как неопределенное.
Это довольно странно, поскольку я полностью дублировал один и тот же код для создания/создания, и он работает нормально.
Вот редактирование/изменение код:
=============================== HTML ====================================
<!DOCTYPE html>
<html lang="en">
<head>
...
</head>
<body class="<%= controller_name -%> <%= action_name -%>">
....
<!-- BEGIN PAGE CONTENT -->
<div id="page-content">
<div id='wrap'>
<div id= "groupRole-tableTools" class="options">
<div id="groupRole-addTool" class="btn-group visible">
<button type="button" class="btn dropdown-toggle" data-toggle="dropdown">...</button>
<ul class="dropdown-menu" role="menu">
<li><a id="group-addTool" href="/groups/new">Add a group</a></li>
...
</ul>
</div>
</div>
<div id="groupRole-lineTools" class="options hidden">
...
<a data-toggle="modal" data-accessible-id="#" id="groupRole-editTool" href="#groupRoleModal">...</a>
...
</div>
<div class="panel-body collapse in">
<table class="table table-striped table-bordered datatables" id="groups">...</table>
</div>
<div class="modal fade" id="groupModal" tabindex="-1" access_level="dialog" aria-labelledby="groupModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content"></div>
</div>
</div>
</div> <!--wrap -->
</div> <!-- page-content -->
<!-- END PAGE CONTENT -->
<script src="/assets/administration/groups.index.js></script>
<script src="/assets/administration/init.js></script>
</body>
</html>
А вот это groups.index.js нагруженные страницы:
================= groups.index.js ===================
$(document).ready(function() {
console.log("groups.index.js");
$.ajaxSetup({ cache: false });
var ajaxUrl = "http://" + window.location.host + "/groups.json";
$.ajax({
"dataType": 'json',
"type": "GET",
"url": ajaxUrl,
"success": function (data) {
var table = $('#groups').DataTable({
select: true,
data: data.rows,
columns: [...],
columnDefs: [...]
...
});
table
.on('select', function (e, dt, type, indexes) {
var rowData = table.rows(indexes).data().toArray();
var companyId = rowData[0].company_id;
groupId = rowData[0].group_id;
var groupName = rowData[0].group_name;
// hide add tool
$("#groupRole-addTool").toggleClass("hidden", "visible");
// show line tool
$("#groupRole-lineTools").toggleClass("hidden", "visible");
// set line tools data in DOM
$("#groupRole-editTool").attr("data-accessible-id", accessibleId);
$("#groupRole-editTool").attr("data-accessible-url", accessibleUrl);
})
.on('deselect', function (e, dt, type, indexes) {
// hide line tool
$("#groupRole-lineTools").toggleClass("hidden", "visible");
// show add tool
$("#groupRole-addTool").toggleClass("hidden", "visible");
});
// Handle EDIT GROUP tool click event
$('#groupRole-editTool').on('click', function(e) {
var itemId = $(this).data('accessible-id');
var ajaxUrl = "http://" + window.location.host + accessibleUrl + itemId + "/edit";
e.preventDefault();
e.stopPropagation();
// get EDIT FORM in modal content
$.ajax({
"dataType": 'html',
"type": "GET",
"url": ajaxUrl,
"success": function (code_html, _status) {
$('#groupModal').modal('show');
$("#groupModal div.modal-content").html(code_html);
$("#edit_group").on("ajax:success", function(xhr, data, _status){
console.log("data: "+JSON.stringify(data, null, 2)); # data undefined !!!!
if (data["error"]) {
// errors back from server
$("#modalGroupAlert").removeClass('alert-info');
$("#modalGroupAlert").addClass('alert-danger');
$("#modalGroupAlert span").replaceWith(data["html"]);
$("#modalGroupAlert").toggleClass("hidden", "visible");
} else {
// no errors
table.row.data(data["row"]).draw();
$('#groupModal').modal('hide');
}
});
}
});
});
// Handle ADD GROUP tool click event
$('#groupRole-addTool').on('click', function(e) {
var ajaxUrl = "http://" + window.location.host + "/groups/new";
e.preventDefault();
e.stopPropagation();
// get NEW FORM in modal content
$.ajax({
"dataType": 'html',
"type": "GET",
"url": ajaxUrl,
"success": function (code_html, _status) {
$('#groupModal').modal('show');
$("#groupModal div.modal-content").html(code_html);
$("#new_group").on("ajax:success", function(xhr, data, _status){
console.log("data: "+JSON.stringify(data, null, 2)); # data defined !!!!
if (data["error"]) {
// errors back from server
$("#modalGroupAlert").removeClass('alert-info');
$("#modalGroupAlert").addClass('alert-danger');
$("#modalGroupAlert span").replaceWith(data["html"]);
$("#modalGroupAlert").toggleClass("hidden", "visible");
} else {
// no errors
table.row.add(data["row"]).draw();
$('#groupModal').modal('hide');
}
});
}
});
});
}
Что меня беспокоит то, что ADD GROUP инструмент щелчок событие правильно обрабатывает Ajax запрос заполнить modal с html, а затем правильно запросить json-данные после создания.
, но с аналогичным кодом, Ajax edit request, также заполняет модель формой html, но после обновления данные не определены. Обновление в порядке, данные сына правильно настроены, запрос Ajax также успешный, но никаких данных нет. Только объект xor.
UPDATE 1 =========
Я обновил Аякс: параметры успеха (они были неправы) в
$("#edit_group").on("ajax:success", function(e, data, _status, xor){..}
и проверил объект XOR ... код возврата равен 204, что означает NO CONTENT. Почему обновление Rails 4 PATCH отвечает 204?
xhr: {
"readyState": 4,
"responseText": "",
"status": 204,
"statusText": "No Content"
}
Интересно, не связано ли это с методом формы редактирования ... Я проверю его, указав метод: PUT – erwin