无法将属性读取到未定义的{LowerCase}

时间:2018-06-22 09:30:52

标签: javascript jquery ajax

因此,我正在处理音频部分,我从JSON文件中提取单词,并且在前端显示它们时,应该在音频按钮上onclick从服务器中提取单词并创建音频...但是我不断收到Cannot read property toLowerCase of undefined,似乎找不到错误。

让我们从我声明的变量开始:

var MEDIAARRAY;
var WORDS;
var audioArray;
var audio = new Audio();
var LANGUAGE;
var SOUNDARRAY;

一段代码(我接管了作为答案提供的代码,这对我有所帮助,所以我决定用现在拥有的代码来编辑问题)。

$(document).ready(function () {
getFileArray();
});

$(document).on("click", ".sound", function () {

getFileArray("SomeLanguage");               

 var foundID = MEDIAARRAY.audio.lowercase.indexOf($(this).parent().find('.exerciseWord').val().toLowerCase() + '.mp3');
var currentVal = $(this).parent().find('.fa-volume-up');
  if (foundID > -1) {
    var audio = new Audio();
    audio.src = 'TheServerURL' + MEDIAARRAY.audio.path + MEDIAARRAY.audio.files[foundID] + '';
audio.play();
}
 });

发生错误的行:

var foundID =  MEDIAARRAY.audio.lowercase.indexOf($(this).parent().find('.exerciseWord').val().toLowerCase() + '.mp3');

将类sound附加到的按钮:

function getAudioForWords() {
 var audioBtn = $('<a/>', {
                'class': 'sound btn btn-primary'
            }).html('<i class="fa fa-volume-up"></i>');
return audioBtn;
}

将类exerciseWord附加到的代码:

    var wordCol = $('<div>', {
        class: 'col-md-9 ExerciseWordFontSize exerciseWord',
        'id': 'wordInput[' + ID123 + ']', 
        text: exercise.word
      });

和获取fileArray的那段代码,但是很可能对您来说毫无用处,但是它与我的代码有关,所以...是的。

function getFileArray(param)
{

var request = {
    language: param
};

$.ajax(
{
    url: "TheServerURL",
    type: "POST",
    async: true,
    data: request,
    dataType: 'json',
}).done(function (response)
{
    console.log(response)
    MEDIAARRAY = response;
    audioArray = response.audio;
    console.log(audioArray);

  });
}

1 个答案:

答案 0 :(得分:1)

错误状态varialble MEDIAARRAY仍未在代码流中的某处初始化。查看以下内容是否使您接近分辨率

  1. 您还没有提到什么时候调用getFileArray函数。调用getFileArray函数很关键,因为那是在MEDIAARRAY被赋值时。
  2. 确保在访问MEDIAARRAY的任何属性之前调用getFileArray。
  3. 确保您的API始终返回包含音频属性的对象。

示例

$(document).on("click", ".sound", function () {

//Ensure you supply parameter value to your function(i.e. value of the element you take user input from)
getFileArray("SomeLanguage");               

var foundID = MEDIAARRAY.audio.lowercase.indexOf($(this).parent().find('.exerciseWord').val().toLowerCase() + '.mp3');
var currentVal = $(this).parent().find('.fa-volume-up');
if (foundID > -1) {
    var audio = new Audio();
    audio.src = 'TheServerURL' + MEDIAARRAY.audio.path + MEDIAARRAY.audio.files[foundID] + '';
    audio.play();
}
});