当返回的JSON对象不包含数据时,我遇到了JSON AJAX回调问题。我的代码如下:
$.ajax({
type: "POST",
url: "includes/get_menu_name.php",
headers: {"cache-control": "no-cache"},
data: data,
success: function(html) {
//alert(html);
var app_data = "";
if (html.MenuData != 0) {
$.each( $.parseJSON(html).MenuData, function() {
app_data += "<li data-short='"+this['dish_short']+"' data-desc='"+this['dish_desc']+"' data-dish_id='"+this['dish_id']+"'>"+this['dish_name']+"</li>";
});
$('.listbox').show();
$('.nameslist').html(app_data);
$('li').hover(function() {
$(this).addClass('hover2');
},function(){
$(this).removeClass('hover2');
});
if (html == "") {
$('.listbox').hide();
}
$('li').click(function() {
//alert($('li', this).data('short'));
$('.price').val("");
var main_name = $(this, 'li').text();
$('.main_name').val(main_name);
//$('.price').val($(this).find('.ajaxid').text());
if(main_name.length > 40) {
$('.short_name').val($(this).data('short'))
} else {
$('.short_name').val(main_name);
}
if($(this).data('desc')!="") {
$('.dish_desc').val($(this).data('desc'));
}
var dish_id=$(this).data('dish_id');
$('.main_name').data('dish_id', dish_id);
$('.listbox').hide();
});
}
}
});//end ajax
错误返回:
TypeError:$.parseJSON(...) is null
我已经尝试了各种方法来检查回调中是否有数据,但似乎都没有。我是新手使用JSON,并想知道如果没有数据要返回,我是否应该通过php页面添加不同的回调,但是想知道是否有办法通过javascript执行此操作。
答案 0 :(得分:2)
$。ajax 将以字符串格式返回HTML,您需要这样的内容!
success:function(html)
{
if(html)
{
try
{
html = JSON.parse(html);
if(html.MenuData)
{
// do something interesting
}
else
{
// failed
}
}
catch(e)
{
// failed
}
}
else
{
// failed because response is empty
}
}
答案 1 :(得分:2)
您可以在此指定要用作json的dataType
$.ajax({
type: 'POST',
url: ajaxURL,
data:data,
dataType: 'json',
success: function(data){
JSON.parse(data);
}
});
在服务器端脚本中,您必须使用json_encode函数对数据进行编码。
答案 2 :(得分:1)
通过ajax获取json时,这里有几点需要注意(包括它也会引起你的问题)
1)内容类型
Content-type: application/json
时,Json解析将流畅地工作
html fetch(意为Content-Type: text/html
或等效的)需要手动将json解析为String。
2)Jquery版本 这应该不是问题,因为它自版本以来已经消退:1.5(你可能正在使用最新版本,1.9) 以下是json相关错误的链接:http://bugs.jquery.com/ticket/8108
对于json密集编码,人们经常使用jquery-json(http://code.google.com/p/jquery-json/),它是简单jquery的包装器。您可能想要考虑修复是否不容易。
我希望它至少部分回答。感谢..