【问题标题】:JavaScript returns undefined [closed]JavaScript返回未定义[关闭]
【发布时间】:2012-09-18 23:43:21
【问题描述】:

我有以下从 URL 收到的 JSON,我们在此处将 URL 称为 www.blabla.com/testjson

然后它返回:

[{"Identifier":1,"Naam":"NOT Given","Adres":"Kopenhagen 9","Postcode":"0000LL","Plaats":"NOT Given","Longitude":"0.00000","Latitude":"0.00000"},
    {"Identifier":2,"Naam":"NOT Given","Adres":"NOT Given 1","Postcode":"0000LL","Plaats":"Rotterdam","Longitude":"0.00000","Latitude":"0.00000"},
    {"Identifier":3,"Naam":"NOT Given","Adres":"NOT Given 6","Postcode":"0000LL","Plaats":"Rotterdam","Longitude":"0.00000","Latitude":"0.00000"},
    {"Identifier":4,"Naam":"NOT Given","Adres":"NOT Given 1","Postcode":"0000LL","Plaats":"Den Haag","Longitude":"0.00000","Latitude":"0.00000"},
    {"Identifier":5,"Naam":"NOT Given","Adres":"NOT Given 218","Postcode":"0000LL","Plaats":"Zoetermeer","Longitude":"0.00000","Latitude":"0.00000"}
];

我想检索这个 JSON 并返回这个结果,但是我得到了 UNDEFINED,这是我的代码:

$.each("www.blabla.com/testjson", function(index, element) {
    $('.result').append(element.Naam);
    alert(element.Naam);
});

您还需要检查用户 cookie 是否为真,否则它不会返回任何内容,我不这样做,因为我使用 phonegap 和 jquery mobile。会不会是这个问题?

【问题讨论】:

  • 在这种情况下,我假设$.each 将遍历字符串的每个字符。并且字符串没有属性Naam(这就是你得到undefined的原因)。它不会执行 AJAX 请求。请再次查看文档:api.jquery.com/category/ajax、api.jquery.com/jQuery.each。
  • 你能提供你试图用来获取json文件的url吗?

标签: javascript json cordova jquery-mobile


【解决方案1】:

尝试使用$.getJSON的方法:

$.getJSON('http://www.blabla.com/testjson.json', function(data) {
    $.each(data, function(key, val) {
        $('.result').append(val.Naam);
        alert(val.Naam);
    });
});

更多信息,请查看在线文档:http://api.jquery.com/jQuery.getJSON/

PS:确保您已将网站 www.blabla.com 添加到您的白名单例外中。

有关Phonegap白名单例外的更多信息,请查看在线文档(以下链接适用于Phonegap / Cordova 2.1.0版本):http://docs.phonegap.com/en/2.1.0/guide_whitelist_index.md.html#Domain%20Whitelist%20Guide

【讨论】:

  • 搞定了,现在我什么也没回来,是不是因为我需要设置cookies??
  • 您是否将网站 www.blabla.com 添加到您的白名单例外?
  • @bdz:这与 cookie 无关。如果 URL 是外部的,您可能会遇到 同源策略的问题:en.wikipedia.org/wiki/Same_origin_policy.
  • @Littm:我不认为“白名单例外”在这里真的很有帮助,因为它并不指的是 SOP 的特定解决方案。你到底在说什么? CORS?
  • @FelixKling:您需要使用Phonegap添加白名单例外,否则您将无法访问外部链接。检查此链接:docs.phonegap.com/en/2.1.0/…
【解决方案2】:

您的代码将遍历参数字符串“www.blabla.com/testjson”的每个字符,返回“未定义”,因为通过编写 element.Naam,您正试图访问一个名为“Naam”的不存在的属性字符串。

您需要使用 ajax 调用加载外部 json 内容并对其进行解析。

如果您也有兴趣处理错误,这里是Littm 的答案的更长替代方案:

    $(document).ready(function()
    {
        $.ajax(
        {
            type: "GET",
            url: "data.json",
            data: "nocache=" + Math.random(),

            // dataType: "json",
            // the above requires 'application/json' as Content-Type headers
            // see 'reference A' in the footer notes
            // if you active this, please modify following code accordingly

            success: function (source, textStatus, jqXHR)
            {
                var data = jQuery.parseJSON(source);
                $.each(data, function(index, value)
                {
                    alert(index+" "+value.Naam);
                });
            },

            error: function(data)
            {
                // alert("ERROR");
            }
        });
    });

注意事项:
1.Reference A

编辑: 要从错误中获取更多信息,请添加以下内容:

$(document).ajaxError(
    function (event, jqXHR, ajaxSettings, thrownError)
    {
        console.log(event);
        console.log(jqXHR);
        console.log(ajaxSettings);
        console.log(thrownError);
    });

然后使用 chrome 控制台。

编辑:
如果我在浏览器中输入您提供的网址,我将被重定向到登录页面。
我认为您的 ajax 代码也正在获取此 HTML 文档。

尝试检查您的会话:您可以在代码中添加一个 div,并在这个新 div 中使用 curl 加载您的 url 内容。除非您在此 div 中看不到您的 json 代码,否则您的会话变量无法正常工作。
如果 curl 可以正确获取您的文件内容,那么 ajax 也可以。

编辑:
看?您的问题是正确登录到您尝试从中获取 json 文件的 Web 服务。

你的朋友是对的。
您必须在 PHP 中正确设置您的 $_SESSION,它基本上使用 cookies 来保留会话信息。

尝试正确:

session_start() ;

在您的 php 代码的开头,在使用 ajax 之前。
参考:
- php.net session_start
- PHP session not working with JQuery Ajax?


请注意,这仅适用于同一域:
Why jquery ajax not sending session cookie

如果您使用不同的子域,您可以尝试使用

setcookie

参考资料: - php.net setcookie
- Cross domain cookie access (or session)

据我所知,没有办法在不同的域中设置 cookie。
如果你处于这种情况,我建议你看看这里描述的 SimpleSAMLPHP: cross domain cookies


祝你好运:)

【讨论】:

  • f.Event currentTarget: HTMLDocument data: undefined delegateTarget: HTMLDocument Exclusive: undefined handleObj: Object isTrigger: true jQuery17109108295564074069: true namespace: "" namespace_re: null result: undefined target: HTMLDocument timeStamp: 1348756349438 type: "ajaxError" proto: 对象
  • 我正在从网络服务获取数据,构建网络服务的人告诉我使用 cookie.. curl 是使用 PHP,我不能将 PHP 与 phonegap 一起使用 :(
  • @bdz:查看我的上一次编辑。请注意,由于您的问题过于本地化,您的问题已被关闭。如果您找不到出路,请向您的网络服务寻求进一步的帮助。
猜你喜欢
  • 2013-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多