0

我有以下从 URL 收到的 JSON,我们在这里调用 URLwww.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。这可能是问题吗?

4

2 回答 2

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 %20白名单%20指南

于 2012-09-27T08:36:26.443 回答
1

您的代码将遍历参数字符串“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.参考文献 A

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

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

然后使用 chrome 控制台。

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

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

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

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

尝试正确:

session_start() ;

在您的 php 代码的开头,在使用 ajax 之前。
参考:
- php.net session_start
- PHP 会话不能与 JQuery Ajax 一起使用?


请注意,这仅适用于同一域
为什么 jquery ajax 不发送会话 cookie

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

setcookie

参考: - php.net setcookie
-跨域 cookie 访问(或会话)

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


祝你好运 :)

于 2012-09-27T09:39:18.733 回答