Im, пытаясь получить содержимое json-файла с моего локального хоста и отобразить его на моей странице, я создал пользовательскую функцию displayProfile
, которая вызывается внутри success
всякий раз, когда файл существует в каталоге. проблема в том, я получаю сообщение об ошибке сказав:Почему ajax возвращает неопределенную ошибку TypeError, если она вызывает функцию при успешном завершении?
TypeError: data is undefined
Jquery код версии 1
$.ajax({
url:'api/profile.json',
dataType:'json',
data: {format: "json"},
success:function(data){
displayProfile();
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
//alert(textStatus+' '+errorThrown);
$("#myfirstname").text('Firstname');
$("#mymiddlename").text('M.I.');
$("#mylastname").text("Lastname");
$("#mybiography").text("Biography")
$("#myprofpic").attr("src","default.jpg");
$("#mycoverphoto").css("background-image","url(defaultcover.jpg");
}
});
var displayProfile = function(data){
// initialize values
var firstname = data.profile.firstname;
var middlename = data.profile.middlename;
var lastname = data.profile.lastname;
var biography = data.profile.biography;
var prof_pic = data.profile.profpic;
var cover_photo = data.profile.coverphoto;
// set values
$("#myfirstname").text(firstname);
$("#mymiddlename").text(middlename.substr(0,1)+".");
$("#mylastname").text(lastname);
$("#mybiography").text(biography)
$("#myprofpic").attr('src',prof_pic);
$("#mycoverphoto").css("background-image","url("+cover_photo+")");
};
Но это работает, когда я просто скопировать содержимое функции и вставить ее успеха, как это:
Jquery код версии 2
$.ajax({
url:'api/profile.json',
dataType:'json',
data: {format: "json"},
success:function(data){
// initialize values
var firstname = data.profile.firstname;
var middlename = data.profile.middlename;
var lastname = data.profile.lastname;
var biography = data.profile.biography;
var prof_pic = data.profile.profpic;
var cover_photo = data.profile.coverphoto;
// set values
$("#myfirstname").text(firstname);
$("#mymiddlename").text(middlename.substr(0,1)+".");
$("#mylastname").text(lastname);
$("#mybiography").text(biography)
$("#myprofpic").attr('src',prof_pic);
$("#mycoverphoto").css("background-image","url("+cover_photo+")");
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
//alert(textStatus+' '+errorThrown);
$("#myfirstname").text('Firstname');
$("#mymiddlename").text('M.I.');
$("#mylastname").text("Lastname");
$("#mybiography").text("Biography")
$("#myprofpic").attr("src","default.jpg");
$("#mycoverphoto").css("defaultcover.jpg)");
}
});
Можете ли вы объяснить, почему работает версия 2? Я начинаю с этого языка. Благодаря!
Если вы хотите использовать данные в displayProfile(), вы должны отправить их как параметр –
'displayProfile();' => 'displayProfile (data);' Голосование для закрытия как опечатка. –
И еще один совет. Не используйте 'success' использование' .done() 'вместо этого. –