背景:我的页面上有两个下拉列表,当它们被更改时,我使用AEFXX的JQote插件来填充一些表,其中包含一些返回的JSON数据。在JSON响应中,一些用户故事具有与之关联的任务,但这些任务没有太多信息,因此我不得不为每个任务执行额外的GET请求以返回此信息。返回的某些任务没有分配所有者,导致字段Task.Owner = null。
以下是我用来完成每项任务的代码:
if(result.Tasks != ""){
$.each(result.Tasks, function(i, tasks){
console.log(tasks._ref);
$.ajax({
url: tasks._ref,
dataType: 'jsonp',
jsonp: 'jsonp',
success: function(data, textStatus, jqXHR) {
$.get("task.tpl", function(tmpl) {
$("#reqs").jqoteapp(tmpl, data.Task);
});
}
});
})
}
模板(task.tpl)如下所示:
<tr id="infoReturned">
<td name="id" class="row"><%= this.FormattedID %></td>
<td name="name" class="row"><%= this._refObjectName %></td>
<td name="state" class="row"><%= this.State %></td>
<td name="owner" class="row"><%= this.Owner._refObjectName %></td>
</tr>
试验: 我提到How to test an empty Object from JSON。
我添加了以下功能:
function isEmpty(obj) {
for (var prop in obj) {
if (obj.hasOwnProperty(prop))
console.log("false");
return false;
}
}
,将GET的成功函数修改为:
success: function(data, textStatus, jqXHR) {
if (isEmpty(data.Task.Owner)){
$.get("emptyTask.tpl", function(tmpl) {
$("#reqs").jqoteapp(tmpl, data.Task);
});
}
else {
$.get("task.tpl", function(tmpl) {
$("#reqs").jqoteapp(tmpl, data.Task);
});
}
}
,并创建了一个新的模板文件(emptyTask.tpl),其中所有者部分为空:
<tr id="infoReturned">
<td name="id" class="row"><%= this.FormattedID %></td>
<td name="name" class="row"><%= this._refObjectName %></td>
<td name="state" class="row"><%= this.State %></td>
<td name="owner" class="row"></td>
</tr>
,但我仍然收到错误:
Uncaught TypeError: <unknown message TemplateExecutionError>
(anonymous function)
$.extend.jqotejquery.jqote2.js:107
$.each.$.fn.(anonymous function)jquery.jqote2.js:76
$.ajax.success.$.each.$.each.$.ajax.successpy2Test.html:155
jQuery.extend._Deferred.deferred.resolveWithjquery-latest.js:1016
donejquery-latest.js:7247
jQuery.ajaxTransport.send.callbackjquery-latest.js:8028
问题: 如何修复task.tpl的最后一部分以考虑可能的空值,或修改AJAX成功函数以正确处理这种情况?
答案 0 :(得分:0)
找到一个类似于我之前尝试的解决方案:
if ((data.Task.Owner) == null){
$.get("emptyTask.tpl", function(tmpl) {
$("#reqs").jqoteapp(tmpl, data.Task);
});
}
else {
$.get("task.tpl", function(tmpl) {
$("#reqs").jqoteapp(tmpl, data.Task);
});
}
我仍然对修改模板文件以解决此问题的解决方案感兴趣。
如果您有其他答案,请发帖!