JavaScript返回undefined

时间:2012-09-27 08:30:01

标签: javascript json cordova jquery-mobile

我从网址收到以下JSON,我们在此处调用网址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。这可能是问题吗?

2 个答案:

答案 0 :(得分:3)

尝试使用方法$.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

答案 1 :(得分:1)

你的代码将遍历param字符串“www.blabla.com/testjson”的每个字符,返回'undefined',因为通过编写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加载网址的内容。直到你没有在这个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


祝你好运:)