【问题标题】:$.getJson function with special characters in title$.getJson 函数,标题中有特殊字符
【发布时间】:2012-10-31 11:15:02
【问题描述】:

我遇到了这个问题: 我尝试将数据从 .json 文件加载到我的网站,但我遇到了标题中的特殊字符(Ó、Í、É、空格)的问题。我只能更改 .HTML 文件 这是一个例子:

.json:

{
    "Bibliotecas": [
        {
            "BIBLIOTECA": "Biblioteca General de Navarra ",
            "DIRECCIÓN ": "Plaza de San Francisco",
            "COD. POSTAL": 31001,
            "POBLACIÓN": "Pamplona",
            "TELÉFONO": 848427797,
             .....................

.html:

<!DOCTYPE HTML> 
<html>
    <head>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">

    <title>JSON multiple zombies
    </title> 

    <script src="HostFiles/jquery.js"></script>
    <link href="reset.css" rel="stylesheet" type="text/css" media="screen">




    <script>


        $(document).ready(function() {
                 $.getJSON('json/bibliotecas.json', function(json) { 

                 $.each(json.Bibliotecas, function () {

                 $('<article class="json"></article>').append(

                 '<p> ' + this.BIBLIOTECA + '</p>'  + 
                 '<p> ' + this["DIRECCIÓN "] + '</p>' + 
                 '<p> ' + this.POBLACIÓN + '</p>' + 
                 '<p> ' + this.TELÉFONO + '</p>'  + 


                 '</br></br>'
                 ).appendTo('body');


    });          

  });

});





    </script>





</head> 
<body> 

</body>
    </html>

结果:

Biblioteca General de Navarra

undefined

undefined

undefined

【问题讨论】:

    标签: jquery html json getjson


    【解决方案1】:

    你应该使用square bracket notation:

    $.each(json.Bibliotecas, function() {
        $('<article class="json"></article>').append(
            '<p> ' + this["BIBLIOTECA"] + '</p>'  +   
            '<p> ' + this["DIRECCIÓN"] + '</p>' + 
            '<p> ' + this["POBLACIÓN"] + '</p>' +  
            '<p> ' + this["TELÉFONO"] + '</p>'  +
            // ...
    

    【讨论】:

    • 嗨,我试过了,但还是有同样的问题,没有任何改变; PS:我正在使用
    【解决方案2】:

    在 Javascript 中,这些特殊字符不是有效的标识符,因此您可以使用它们来定义对象和/或变量。
    因此,您不能使用它们来使用点语法遍历您的对象。

    但是,您可以使用 [key] 语法访问它们:

    var direction = obj["Bibliotecas"][0]["DIRECCIÓN "];
    

    如你所见here

    你的循环会变成这样:

    $.each(json["Bibliotecas"], function (index, value) {
        $('<article class="json"></article>').append(
            '<p> ' + value["BIBLIOTECA"] + '</p>'  +
            '<p> ' + value["COD. POSTAL"] + '</p>' + 
            '<p> ' + value["DIRECCIÓN "] + '</p>' + 
            '<p> ' + value["POBLACIÓN"] + '</p>' +  
            '<p> ' + value["TELÉFONO"] + '</p>' + ...
        );
    });
    

    更新 1

    $.each() 方法,使用两个参数调用回调,function (index, value) 用于数组,function (key, value) 用于对象映射;它也不会应用不同的上下文。
    因此,我们必须使用回调参数而不是使用 this 来访问这些值。 我已经更新了代码以反映这一点。

    【讨论】:

    • 我只能使用 .html 文件,我无法更改 .json 文件中的任何内容。我试过你的方法。它仍然无法正常工作。请帮忙。这是整个 .html:lukcian.x10.mx/json5.html
    • 我已经更新了答案,$.each() 函数出现错误。另外,您确定为 JSON 文件正确设置了 Content-Type 标头吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    相关资源
    最近更新 更多