【发布时间】:2017-03-27 15:48:46
【问题描述】:
这是我的代码,它在我的 Visual Studio 12 机器中完美地从 Web 服务返回症状列表。
$('#manLeg').mapster($.extend({}, options,{
onClick: function (e) {
if (e.key === 'toes')
{
$.ajax({
url: "SympsService.asmx/GetSymptoms",
method: "post",
dataType: "json",
data: JSON.stringify({ organ_name: "toes" }),
contentType: "application/json",
success: function (data) {
createDataTable('#choiseTable', null);
createDataTable("#symptomsTable", null);
$('#choiseTable').on("click", "tbody button", function (evt) { moveRow(evt, '#choiseTable', '#symptomsTable'); } )
$('#symptomsTable').on("click", "tbody button", function (evt) { moveRow(evt, '#symptomsTable', '#choiseTable'); })
var sympList = 'GetSymptoms' ? JSON.parse(data.d) : data.d;
createDataTable('#symptomsTable', sympList);
function createDataTable(target, data) {
$(target).DataTable({
destroy: true,
paging: false, searching: false, info: false, data: data,
columnDefs: [{
targets: [-1], render: function () {
return "<button type='button'>" + (target == '#choiseTable' ? 'Remove' : 'Choose') + "</button>"
}
}],
columns: [
{
'data': 'Sympt',
'title': 'toes Symptoms',
class: 'center'
},
{
'data': null, 'title': 'Action'
}
]
});
}
function moveRow(evt, fromTable, toTable) {
var table1 = $(fromTable).DataTable();
var table2 = $(toTable).DataTable();
var tr = $(evt.target).closest("tr");
var row = table1.rows(tr);
var obj = { 'Sympt': row.data()[0].Sympt };
table2.row.add(obj).draw();
row.remove().draw();
}
},
error: function (error, status) {
console.log(error);
debugger;
}
});
但是当我在 Visual Studio 13 上的另一台机器上运行它时,它会在 console.log(error) 上返回错误。错误是:
Object { readyState: 4, getResponseHeader: .ajax/x.getResponseHeader(), getAllResponseHeaders: .ajax/x.getAllResponseHeaders(), setRequestHeader: .ajax/x.setRequestHeader(), overrideMimeType: .ajax/x.overrideMimeType(), statusCode: .ajax/x.statusCode(), abort: .ajax/x.abort(), state: .Deferred/d.state(), always: .Deferred/d.always(), then: .Deferred/d.then(), 11 more… }
这让我发疯,因为我需要在那台机器上运行它,但无法理解这个错误的含义。 任何形式的帮助将不胜感激。在此致谢。
【问题讨论】:
-
错误处理程序有三个参数。全部使用。
-
这一行 var sympList = 'GetSymptoms' ? JSON.parse(data.d) : data.d;对我来说没有意义。如果你的 web 服务返回一个字符串,你需要 JSON.parse。如果它返回并反对,它可能已经被序列化了。在任何情况下,它的行为都是一致的。
-
如果您在 Visual Studio 中停止调试器行,您应该能够检查错误对象。检查 error.responseText 或 error.response.JSON.message 中的值以获取实际错误。
-
作为安全检查,将 error: function (error, status) 更改为 error: function (reqError, status) 或除“error”之外的任何其他内容,并查看它是否在控制台中显示相同。
-
为什么你的函数是在你的 ajax 调用中定义的?
标签: jquery ajax datatables