【问题标题】:JSON element is null resulting in "Uncaught TypeError: <unknown message TemplateExecutionError>" for JQote2JSON 元素为空,导致 JQote2 出现“Uncaught TypeError: <unknown message TemplateExecutionError>”
【发布时间】:2011-10-07 16:58:42
【问题描述】:

背景:我的页面上有两个下拉菜单,当它们被更改时,我使用 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 成功函数以正确处理这种情况?

【问题讨论】:

    标签: json null jqote


    【解决方案1】:

    找到了一个类似于我之前尝试的解决方案:

    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);
      });
    }
    

    我仍然对修改 template 文件以处理此问题的解决方案感兴趣。

    如果您有其他答案,请发布!

    【讨论】:

      猜你喜欢
      • 2019-07-14
      • 2020-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多