#jquery #json #ajax #datatable
#jquery #json #ajax #datatable
Вопрос:
У меня есть asp.net приложение webforms в нем У меня есть HTML-таблица, которая заполняется с помощью ajax-вызова, полученного службой, я хочу преобразовать таблицу в jQuery DataTable и передать данные в datatable, но не смог это сделать, и по щелчку он выдает 2 ошибки в предупреждении (1)является ли «Предупреждение о таблицах данных: идентификатор таблицы = tblnotificationlogHistory — ошибка Ajax. Для получения дополнительной информации об этой ошибке, пожалуйста, смотрите http://datatables.net/tn/7 « и (2) — это «DataTables предупреждение: идентификатор таблицы = tblnotificationlogHistory — невозможно повторно инициализировать DataTable. Для получения дополнительной информации об этой ошибке, пожалуйста, смотрите http://datatables.net/tn/3 «.
Html-код Aspx:
<table id="tblnotificationlogHistory" class="tblnotificationlogHistory table table-bordered"
style="margin: 10px auto; width: 90%;">
<thead>
<tr>
<th>
Date
</th>
<th class='mainCol'>
Status
</th>
<th>
Updated By
</th>
</tr>
</thead>
</table>
<asp:TemplateField HeaderText="Comments" HeaderStyle-CssClass="table-header-repeat">
<ItemTemplate>
<asp:Label ID="additionalcomments" runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"comments") %>'
CssClass="commentsHistory"></asp:Label>
JS Code:
jQuery(".statusname, .commentsHistory").click(function (event) {
debugger;
var callForCommHistory = (jQuery(this).attr("class") == 'commentsHistory');
var ccrsflattenId = jQuery(this).next('._ccrsflattenId').text();
var FlattenExtID = jQuery(this).next('._ccrsflattenId').next('._FlattenExtID').text();
var webMethod = '/Service/CRService.asmx/GetUnmatchedHistoryStatuses'
var parameters = "{ccrsflattenId: " ccrsflattenId " , FlattenExtID: " FlattenExtID " , isCallForCommHistory: " callForCommHistory "}";
console.log('parameters: ' parameters);
showLoader();
jQuery.noConflict();
jQuery(".tblnotificationlogHistory").DataTable({
paging: false,
searching: false,
info: false,
processing: true,
serverside: true,
"ajax": {
"type": "POST",
"url": "webMethod",
"data": "parameters",
"contentType": "application/json; charset=utf-8",
"dataType" : "json"
},
"columns": [
{ "data": "createdDate" },
{ "data": "comments" },
{ "data": "updatedby" }
]
});
});
/Service/CRService.asmx/GetUnmatchedHistoryStatuses Код службы:
[WebMethod(EnableSession = true)]
public string GetUnmatchedHistoryStatuses(string ccrsflattenId, string FlattenExtID, bool isCallForCommHistory = true)
{
string daresult = string.Empty;
try
{
DataSet dataSet = new DataSet();
SqlParameterCollection sqlParameterCollection = ClientSessions.GetParameterCollectionConstructor();
sqlParameterCollection.AddWithValue("@isCommHistory", isCallForCommHistory);
if (!string.IsNullOrEmpty(FlattenExtID))
sqlParameterCollection.AddWithValue("@rqFlattenExtID", Convert.ToInt32(FlattenExtID));
if (!string.IsNullOrEmpty(ccrsflattenId))
sqlParameterCollection.AddWithValue("@ccrsFlattenExtID", Convert.ToInt32(ccrsflattenId));
dataSet = CommissionHandler.GetUnmatchedHistory_Statuses(sqlParameterCollection);
if (dataSet.Tables.Count > 0)
{
daresult = JsonConvert.SerializeObject(dataSet, Formatting.Indented);
}
}
catch (Exception ex)
{
throw ex;
}
return daresu<
}
Csharp code to hit the stored procedure with parameters passed with the ajax call:
public static DataSet GetUnmatchedHistory_Statuses(SqlParameterCollection collection)
{
DataSet ds = new DataSet();
try
{
ds = SqlHelper.ExecuteDataset(ClientSessions.ConnectionString, "CR_GetUnmatchedHistory_Statuses", collection);
}
catch (Exception)
{
throw;
}
if (ds.Tables.Count < 1)
ds.Tables.Add(new DataTable());
return ds;
}
Комментарии:
1. Первая ошибка указывает на то, что запрос ajax получает ответ с ошибкой от вашего сервера (ответ, отличный от 200), в то время как вторая ошибка сообщает, что ваш код пытается изменить параметр после инициализации datatable. эта ссылка может помочь: datatables.net/manual/tech-notes
Ответ №1:
Привет, похоже, форматирование в вашем инициализации DataTable неверно, оно должно быть что-то вроде :
$('#example').DataTable( {
serverSide: true,
ajax: {
url: '/data-source',
type: 'POST'
}
} );
У вас есть ajax в кавычках, а ваш URL и данные указаны в кавычках, поэтому они не будут ссылаться на переменные JS..
т.е.
jQuery(".tblnotificationlogHistory").DataTable({
paging: false,
searching: false,
info: false,
processing: true,
serverside: true,
ajax: {
type: POST,
url: webMethod,
data: parameters,
contentType: 'application/json; charset=utf-8',
dataType : 'json'
},
Комментарии:
1. Удаление цитат не решило проблему полностью. По-прежнему данные не заполняются в datatable, и при нажатии появляется ошибка не удается повторно инициализировать datatable.
2. Вам нужно будет включить свои инструменты разработки в браузере и проверить JSON, возвращенный после вашего вызова на сервер для получения данных. Возможно, было бы неплохо включить ваш полный код, так как из приведенного выше неясно, какие события onclick у вас могут возникнуть, т.Е. Появляется ошибка «и при нажатии не удается повторно инициализировать datatable» что должно происходить при нажатии?
3. Я отредактировал вопрос с помощью кода .. пожалуйста, проверьте
4. Можете ли вы проверить консоль инструментов разработчика вашего браузера и посмотреть, действительно ли происходит вызов данных JSON, и если да, то какие данные возвращаются?