Jquery 如何捕获JSON数据中的解析错误

Jquery 如何捕获JSON数据中的解析错误,jquery,jsonp,Jquery,Jsonp,让我重新表述我的问题。我需要解析Last.FM中的JSON数据。根据查找的成功程度,这些数据可能会发生变化,这意味着我的JSONP节点在不同的搜索中可能会有所不同。问题是,如果我查找一个不存在的节点,整个查找就会失败,并且我丢失了JSON对象中的所有数据。我不知道如何捕获这种错误,并在错误发生后继续遍历JSON数据 /********** Last FM Scrobbler - get album JSON details ***********/ function refreshArtwor

让我重新表述我的问题。我需要解析Last.FM中的JSON数据。根据查找的成功程度,这些数据可能会发生变化,这意味着我的JSONP节点在不同的搜索中可能会有所不同。问题是,如果我查找一个不存在的节点,整个查找就会失败,并且我丢失了JSON对象中的所有数据。我不知道如何捕获这种错误,并在错误发生后继续遍历JSON数据

/********** Last FM Scrobbler - get album JSON details ***********/

function refreshArtwork(artist, track) {    
$.ajax({
  type: 'GET',
  url: 'http://ws.audioscrobbler.com/2.0/',
  data: {
        method: 'track.getInfo',
        api_key: 'c88cc53549bec0e9f246f056dc05a745',
        artist: artist,
        track: track,
        format: 'json',
        },
  dataType: 'jsonp', //must be JSONP for CORS
  error: lstError, 
  success: getLastfm
   });
}



/* success: parse album XML from LastFM scrobbler */
function getLastfm(json) {

//alert(json.track.wiki.summary); // wiki summary
var lstArtist = (json.track.artist['name']); // artist
var lstTitle = (json.track.name); // Title
var lstAlbumart = (json.track.album.image[3]['#text']);// 0=small, 1=medium, 2=large,    3=xlarge
//var listWikis = (json.track.wiki.summary); // WIKI summary
var lstAlbum = (json.track.album.title); // album

// if no artist info then error in name
if (lstArtist ===null) {
    $('#response').append('<li style="color:red">' + 'No Artist Match on Last.FM!' + '</li>');
    lstError();
}
// if no album art info then error in album URL
if (lstAlbumart ===null) {
    $('#response').append('<li style="color:red">' + 'No Album Art URL Match on    Last.FM!' + '</li>');
    lstError();
}
/**********最后一个FM Scrobbler-获取相册JSON详细信息***********/
艺术作品(艺术家、曲目){
$.ajax({
键入:“GET”,
网址:'http://ws.audioscrobbler.com/2.0/',
数据:{
方法:“track.getInfo”,
api_键:“c88cc53549bec0e9f246f056dc05a745”,
艺术家:艺术家,
轨道:轨道,
格式:“json”,
},
数据类型:“jsonp”,//必须是CORS的jsonp
错误:lstError,
成功:getLastfm
});
}
/*成功:从LastFM scrobbler解析相册XML*/
函数getLastfm(json){
//警报(json.track.wiki.summary);//wiki摘要
var lstart=(json.track.artist['name']);//artist
var lstTitle=(json.track.name);//Title
var lstAlbumart=(json.track.album.image[3]['#text']);//0=small,1=medium,2=large,3=xlarge
//var listWikis=(json.track.wiki.summary);//wiki summary
var lstAlbum=(json.track.album.title);//相册
//如果没有艺术家信息,则名称错误
如果(lstart==null){
$(“#响应”).append(“
  • ”+“Last.FM上没有艺术家匹配!”+”
  • ); lstError(); } //如果没有相册艺术信息,则在相册URL中出错 如果(lstAlbumart==null){ $(“#响应”).append(“
  • ”+“Last.FM上没有相册艺术URL匹配!”+”
  • ); lstError(); }

    例如,如果JSON数据中缺少唱片集标题,我无法访问任何其他节点。lstTitle=(JSON.track.name);如果缺少,其他节点将无法工作。

    您可以使用
    typeof
    检查是否存在节点

    比如:

    var lstArtist = (typeof json.track.artist.name === "string")
                    ? json.track.artist.name
                    : '';
    
    这会将
    lstArtist
    变量设置为艺术家的姓名或空白字符串(如果该名称实际上不存在)

    typeof
    最大的优点是它总是返回一个字符串,即使您正在检查的内容不存在(在本例中,它返回字符串:“undefined”)

    请在此处查看有关
    typeof
    的一些文档:


    注意上面的代码只是一个三元运算符(缩写为if/then语句)。这里的文档用于三元运算符:

    您可以使用
    typeof
    检查节点的存在

    比如:

    var lstArtist = (typeof json.track.artist.name === "string")
                    ? json.track.artist.name
                    : '';
    
    这会将
    lstArtist
    变量设置为艺术家的姓名或空白字符串(如果该名称实际上不存在)

    typeof
    最大的优点是它总是返回一个字符串,即使您正在检查的内容不存在(在本例中,它返回字符串:“undefined”)

    请在此处查看有关
    typeof
    的一些文档:


    注意上面的代码只是一个三元运算符(缩写为if/then语句)。这里的三元运算符文档:

    我很困惑…我仍然无法根据“”测试返回的JSON值或null或未定义,但不成功。一旦其中一个节点不是JSON对象的一部分,所有数据都不会返回。挑战在于JSON将根据搜索结果而改变

    /********** Last FM Scrobbler - get album JSON details ***********/
    
    function refreshArtwork(artist, track) {    
    $.ajax({
      type: 'GET',
      url: 'http://ws.audioscrobbler.com/2.0/',
      data: {
            method: 'track.getInfo',
            api_key: 'c88cc53549bec0e9f246f056dc05a745',
            artist: artist,
            track: track,
            format: 'json',
            },
      dataType: 'jsonp', //must be JSONP for CORS
      error: lstError, 
      success: getLastfm
      });
    }
    
    
    
    /* success: parse album XML from LastFM scrobbler */
    function getLastfm(json) {
    
    //alert(json.track.wiki.summary); // wiki summary
    var lstError = (typeof json.error === "string")
                ? json.error
                : '';
    
    var lstArtist = (typeof json.track.artist.name === "string")
                ? json.track.artist.name
                : '';
    var lstTitle = (typeof json.track.name === "string")
                ? json.track.name
                : '';
    var lstAlbumart = (typeof json.track.album.image[3]['#text'] === "string")
                ? json.track.album.image[3]['#text']
                : '';
    var lstAlbum = (typeof json.track.album.title === "string")
                ? json.track.album.title
                : '';
    var lstWikis = (typeof json.track.wiki.summary === "string")
                ? json.track.wiki.summary
                : '';
    

    我感到困惑…我仍然无法根据“”或null或undefined成功测试返回的JSON值。一旦其中一个节点不是JSON对象的一部分,所有数据都不会返回。挑战在于JSON将根据搜索结果而变化

    /********** Last FM Scrobbler - get album JSON details ***********/
    
    function refreshArtwork(artist, track) {    
    $.ajax({
      type: 'GET',
      url: 'http://ws.audioscrobbler.com/2.0/',
      data: {
            method: 'track.getInfo',
            api_key: 'c88cc53549bec0e9f246f056dc05a745',
            artist: artist,
            track: track,
            format: 'json',
            },
      dataType: 'jsonp', //must be JSONP for CORS
      error: lstError, 
      success: getLastfm
      });
    }
    
    
    
    /* success: parse album XML from LastFM scrobbler */
    function getLastfm(json) {
    
    //alert(json.track.wiki.summary); // wiki summary
    var lstError = (typeof json.error === "string")
                ? json.error
                : '';
    
    var lstArtist = (typeof json.track.artist.name === "string")
                ? json.track.artist.name
                : '';
    var lstTitle = (typeof json.track.name === "string")
                ? json.track.name
                : '';
    var lstAlbumart = (typeof json.track.album.image[3]['#text'] === "string")
                ? json.track.album.image[3]['#text']
                : '';
    var lstAlbum = (typeof json.track.album.title === "string")
                ? json.track.album.title
                : '';
    var lstWikis = (typeof json.track.wiki.summary === "string")
                ? json.track.wiki.summary
                : '';
    

    感谢看起来像我一直在搜索的东西…如何测试一个节点,在它破坏整个JSON之前看看它是否在那里我以为我处于第22条军规的时刻!感谢看起来像我一直在搜索的东西…如何测试一个节点,在它破坏整个JSON之前看看它是否在那里我以为我处于第22条军规的时刻!逻辑检查你的t在哪里谈论?我只看到变量声明。你说的逻辑检查在哪里?我只看到变量声明。