我正在尝试进行简单的ajax调用,并将返回的JSON字符串转换为javascript数组。这是正确的值..代码不起作用。我想简单地返回json字符串并将其转换为数组..
function getData(){
var barcode = $('#idQuery').val();
alert(barcode);
var test = $.ajax({
type: 'GET',
dataType: 'json',
url: 'http://example.com/public/ruser/family',
data: {barcode: barcode},
success: function(data){
alert(data);
}
});
alert(test);
}
如果我把它放在网址中,这是浏览器的响应。
[[{"age":10,"id":"1","name":"John Doe","points":"4275653423"}]]
答案 0 :(得分:0)
编辑:一旦响应有效json,并执行ajax成功回调,为了将服务器返回的json字符串转换为javascript对象,请使用JSON.parse()
success: function (data) {
var obj = JSON.parse(data);
alert(obj.age);
}
注意:只有更现代的浏览器本身支持json序列化(JSON.parse)。为确保旧浏览器支持此功能,建议使用Douglas Crockford的json2.js:
https://github.com/douglascrockford/JSON-js/blob/master/json2.js
只需下载并在页面中加入上述内容即可。
编辑:来自服务器的响应包括一个数组,其中包含另一个包含数据对象的数组:
[[{"age":10,"id":"1","name":"John Doe","points":"4275653423"}]]
服务器需要使用只包含对象的json字符串进行响应:
'{"age":10,"id":"1","name":"John Doe","points":"4275653423"}'
最后,服务器必须使用正确的内容类型'application / json'
进行响应编辑:在您的评论中,您说服务器正在返回303,这是一个重定向。您在ajax调用中使用的url会重定向到另一个返回所需数据的url。您需要使用返回数据的URL。网址需要完全匹配。例如,http://example.com/public/ruser/family
与http://example.com/public/ruser/family/
编辑:最终代码:
function getData(){
var barcode = $('#idQuery').val();
var test = $.ajax({
type: 'GET',
dataType: 'json',
url: 'http://example.com/public/ruser/family.json',
data: { barcode: barcode },
success: function (data) {
var obj = JSON.parse(data);
alert(obj.age);
}
});
}
答案 1 :(得分:0)
function getData(){
var barcode = $('#idQuery').val();
alert(barcode);
$.ajax({
type: 'POST',
contenttype: "application/json; charset=utf-8",
url: "controller/action",
data: {barcode: barcode},
success: function(data){
alert(data);
}
});
}
尝试上面它应该工作让我知道进展................
答案 2 :(得分:0)
数据提供者与使用$ .ajax的客户端位于同一域中吗? 如果没有,您需要确保您使用JSONP(我可以看到您不是来自您的函数),或者数据提供程序上的Access-Control-Allow-Origin标头设置为允许客户域。
如果它是跨源问题,则永远不会调用成功回调,您可以通过实现完整方法进行进一步调试来测试错误。 (注意:console.log对于调试比警报更有用。)
查看此日志的内容:
function getData(){
var barcode = $('#idQuery').val();
var test = $.ajax({
type: 'GET',
dataType: 'json',
url: "http://api.flickr.com/services/feeds/photos_public.gne?format=json",
data: {barcode: barcode},
success: function(data){
console.log(data);
},
complete: function(jqXHR, textStatus) {
console.log(jqXHR)
console.log("What's the issue? " + textStatus)
}
});
}
此外,如果您使用Chrome的开发工具(您应该这样做,因为它们非常棒),任何跨域错误都会记录到控制台。 (使用F12打开它或右键单击并检查元素。)