JavaScript返回undefined
我有我从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);
});
你还需要检查用户的cookies是否真实,否则它不会返回任何东西,我不这样做,因为我使用phonegap和jquery mobile。 这可能是问题吗?
尝试使用$.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
你的代码将遍历参数字符串“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.参考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,它基本上使用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
祝你好运 :)