【问题标题】:How to use microtemplate如何使用微模板
【发布时间】:2012-05-30 04:34:53
【问题描述】:

由于某种原因,我无法让John Resig micro template 工作。我已经阅读了here,并且可以让这个示例工作,但它适用于一个非常简单的对象。(即var data = { fname : "fred" };),但是,当我尝试使用我更复杂的对象时

{"order":{"name":"TRADEMARK WHEEL COMPANY","sales_order_id":"18278","order_date":"05 \u2044 15 \u2044 2012","due_date":"05 \u2044 21 \u2044 2012","order_number":"1213140","reference":"21192D\/35546","order_description":"BICICLETTE","ship_name":"ADAMS","ship_address1":"1919 W RANDOLPH ST.","ship_address2":"","ship_city":"CHICAGO","ship_state":"IL","ship_postal_code":"60606","ship_country":null,"ship_via":"FEDEX GROUND","tracking_number":null,"package_contents":null,"freight":"0.00","taxable":"0.00","nontaxable":"748.88","sales_tax":"0.00"},"line_item":[{"description":"RED ONE","quantity":"2.00","sell_price":"349.44"},{"description":"FRONT GEAR","quantity":"2.00","sell_price":"15.00"},{"description":"5th GEAR","quantity":"2.00","sell_price":"10.00"}]}

并尝试像这样访问它

<script>
(function () {

  var submitStr="test string of data";

  $.ajax({
    type: "POST",
    url: "getJSON.php",
    data: submitStr,
    success: function (data) {
    console.log(data);
    var generatedText = tmpl("order_detail", data);
    var elem = document.getElementById("elemId");
    elem.innerHTML = generatedText;
    }
    });

}());
</script>
<script id="order_detail" type="text/html">
        <div>
Name:<%=data.order.name%> ID:<%=data.order.sales_order_id%><hr/>

<%for(var i=0;i<data.line_item.length;i++) {%>

      description: <%= data.line_item[i].description %><br/>
      quantity: <%= data.line_item[i].quantity %><br/>
      price: <%= data.line_item[i].sell_price %><hr/>


<%}%>
</div> 

 </script> 

我收到data 未定义的错误。我在没有data. 的情况下尝试过,只是尝试直接访问对象的值,但这也不起作用。

感谢您在使用这个东西时提供的任何帮助!

【问题讨论】:

  • console.log(data); 有什么好处
  • 我把对象打印出来,就像一个 json 字符串。

标签: javascript jquery json jquery-templates


【解决方案1】:

1.在$.ajax成功回调success: function (data)你得到data作为一个JSON字符串,你必须先将它解析为一个对象,然后再将它传递给tmpl函数。

$.ajax({
    type: "POST",
    url: "getJSON.php",
    data: submitStr,
    success: function (data) {
        console.log(data);

        data = JSON.parse(data);

        var generatedText = tmpl("order_detail", data);
        var elem = document.getElementById("elemId");
        elem.innerHTML = generatedText;
    }
});

2.删除模板中的所有data前缀。

【讨论】:

  • console.log(data) //{"order":{"name":"TRADEMARK WHEEL COMPANY","sales_order_id":"18278","order_date":"05 \u2044 15 \u2044 2012","due_date":"05 \u2044 21 \u2044 2012","order_number":"1213140","reference":"21192D\/35546","order_description":"BICICLETTE","ship_name":"ADAMS","ship_address1":"1919 W RANDOLPH ST.","ship_address2":"","ship_city":"CHICAGO","ship_state":"IL","ship_postal_code":"60606","ship_country":null,"ship_via":"FEDEX
  • GROUND","tracking_number":null,"package_contents":null,"freight":"0.00","taxable":"0.00","nontaxable":"748.88","sales_tax":"0.00"},"line_item":[{"description":"RED ONE","quantity":"2.00","sell_price":"349.44"},{"description":"FRONT GEAR","quantity":"2.00","sell_price":"15.00"},{"description":"5th GEAR","quantity":"2.00","sell_price":"10.00"}]} 并且错误仍然存​​在Uncaught ReferenceError: data is not defined
  • @thomas 当data 是一个字符串时,Chrome 会记录的内容,如果它是一个对象,则 chrome 会显示带有箭头的Object。我已经更新了第二点的答案。
  • 使用[这个函数] (stackoverflow.com/a/3826081) console.log(data)给我[object Object]
  • 完美运行。非常感谢。老实说,我曾尝试使用 jquery parsejson 进行解析,但一定是在某个关键的地方出错了。你救了我很多脑震荡,也救了我的桌子很多凹痕。非常感谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-31
  • 1970-01-01
  • 2011-11-08
  • 2015-09-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多