如何处理自动完成框中AJAX调用的未定义响应?

时间:2016-02-03 00:05:21

标签: javascript php jquery json xml

我有以下功能:

function GetGames(request) {
    //Replace spaces with a '+'
    var url = request.term.replace(/\s/g,"+");
    return $.ajax({
        'url': "php/gamescript.php?search=" + url, 
        'dataType': 'json'
    }).then(function(data){
        return $.map(data.Game || [], function(v,i){
            return {
                label: v.GameTitle + ' Game (' + v.ReleaseDate + ')',
                value: v.GameTitle 
            }
        });
    })
}  

及其上方,处理返回数据的代码:

function AutoComplete() {
    $(".searchbox").autocomplete({  
        source: function(request, response) {  
            $.when( GetGames(request) )
            .done(function(games) {

                var term = request.term.toLowerCase();
                var combine = games
                    .map((v,i) => {
                        //precompute such values if possible
                        return {
                            titleLowerCase: v.value.toLowerCase(),
                            termOffset: (v.value.toLowerCase().indexOf(term)+1) || Infinity,
                            //and keep a reference to the original data
                            data: v
                        }
                    })
                    .sort((a, b)=>{
                        //sortOn(termOffset ASC, titleLowerCase ASC)
                        return (a.termOffset - b.termOffset) || 
                        (a.titleLowerCase !== b.titleLowerCase && a.titleLowerCase > b.titleLowerCase? 1: -1) || 0;
                    })
                    .map(v => v.data).slice(0, 15);

                response(combine);   
            });
        }
    });
}

我的问题是,有时候,对gamescript.php的搜索将返回'undefined',这将导致此错误:“未捕获的TypeError:无法读取未定义的属性'toLowerCase'”

处理此错误的好方法是什么?我试着做一个简单的方法:

 return {
     label: v.GameTitle + ' Game (' + v.ReleaseDate + ')',
     value: v.GameTitle || " "
 }

至少使代码运行,但最终会创建自动填充建议,将'undefined'作为标签。我还试图在GetGames函数中编写一个if语句,但最终我努力引入新代码而不用它创建新的错误。

如果需要,gamescript.php代码为:

<?php 
    $xml_string = file_get_contents("http://thegamesdb.net/api/GetGamesList.php?name=".$_REQUEST['search']);
    $xml = simplexml_load_string($xml_string);
    $json = json_encode($xml);
    $array = json_decode($json,TRUE);
    echo $json;
?>

编辑:我现在尝试了这段代码:

function GetGames(request) {
    //Replace spaces with a '+'
    var url = request.term.replace(/\s/g,"+");
    return $.ajax({
        'url': "php/phpscript.php?search=" + url, 
        'dataType': 'json'
    }).then(function(data){
        return $.map(data.Game || [], function(v,i){
            if( typeof( v.GameTitle )!='undefined' ){
                return {
                    label: v.GameTitle + ' Game (' + v.ReleaseDate + ')',
                    value: v.GameTitle 
                }
            }
        });
    })
}  

编辑:我已经意识到,如果我在GetGames函数中添加alert(data.Game.GameTitle);,它会成功提醒游戏标题,尽管在自动填充列表中显示为“未定义”。我不知道为什么会发生这种情况......再次,当我搜索“饥饿”时会发生此错误。对于我尝试过的其他游戏查询,它运行正常。

0 个答案:

没有答案