TypeError:a在JavaScript中未定义

时间:2015-07-26 19:19:51

标签: javascript jquery typeerror

我创建了一个JSON读取函数,但是我收到了错误:

  

TypeError:a未定义

这是我的代码:

$(function() {
    var json = $.getJSON("http://localhost/stratagic-json/project_json.php", function() {
        console.log("success");
    });
    var mhtml = '';
    $.each(json.slider, function(key, val) {
        mhtml += '<li><div class="proj-details-wrap"> <img src="images/' + val.image + '" />';
        mhtml += '<div class="proj-badge">' + val.status + '</div>';
        mhtml += '<div class="proj-name">' + val.name + ' <span>' + val.location + '</span> </div>';
        mhtml += '</div>';
        mhtml += ' <div class="container proj-desc">' + val.description + '</div>';
        mhtml += '</li>';
    });
    var $ul = $('<ul class="slides">').append($(mhtml)); // append DOM only one time.
    $('.slider').append($ul);
})

1 个答案:

答案 0 :(得分:4)

问题是$.getJSON是一种异步方法,您正在同步处理它。 json.sliderundefined,因为$.getJSON实际上会返回一个承诺,而不是数据。需要通过回调或承诺访问数据。这应该有效:

$(function() {
    $.getJSON("http://localhost/stratagic-json/project_json.php", function(json) {
      var mhtml = '';
      $.each(json.slider, function(key, val) {
          mhtml += '<li><div class="proj-details-wrap"> <img src="images/' + val.image + '" />';
          mhtml += '<div class="proj-badge">' + val.status + '</div>';
          mhtml += '<div class="proj-name">' + val.name + ' <span>' + val.location + '</span> </div>';
          mhtml += '</div>';
          mhtml += ' <div class="container proj-desc">' + val.description + '</div>';
          mhtml += '</li>';
      });
      var $ul = $('<ul class="slides">').append($(mhtml)); // append DOM only one time.
      $('.slider').append($ul);
    });
})

您也可以这样做:

$(function() {
    var jqXhr = $.getJSON("http://localhost/stratagic-json/project_json.php");
    jqXhr.done( function (data) {
      // Do something
    });
})