Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法读取未定义的的toLowerCase属性_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 无法读取未定义的的toLowerCase属性

Javascript 无法读取未定义的的toLowerCase属性,javascript,jquery,ajax,Javascript,Jquery,Ajax,因此,我正在处理一个音频部分,其中我从JSON文件中提取单词,当我在前端显示单词时,它应该在音频按钮上单击onclick,从服务器提取单词并创建音频。。。但是我不断得到无法读取未定义的的小写属性,而且我似乎找不到错误 让我们从我声明的变量开始: var MEDIAARRAY; var WORDS; var audioArray; var audio = new Audio(); var LANGUAGE; var SOUNDARRAY; 这段代码(我接受了作为答案给出的代码,这对我有了进一步的

因此,我正在处理一个音频部分,其中我从JSON文件中提取单词,当我在前端显示单词时,它应该在音频按钮上单击
onclick
,从服务器提取单词并创建音频。。。但是我不断得到
无法读取未定义的
的小写属性,而且我似乎找不到错误

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

var MEDIAARRAY;
var WORDS;
var audioArray;
var audio = new Audio();
var LANGUAGE;
var SOUNDARRAY;
这段代码(我接受了作为答案给出的代码,这对我有了进一步的帮助,所以我决定用我现在拥有的代码编辑这个问题)

发生错误的行:

var foundID =  MEDIAARRAY.audio.lowercase.indexOf($(this).parent().find('.exerciseWord').val().toLowerCase() + '.mp3');
声音
附加到的按钮:

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

  });
}

错误状态VariableMediaArray在代码流中的某个位置保持未初始化状态。看看下面的内容是否能让您接近解决方案

  • 您还没有提到在什么时候调用getFileArray函数。对getFileArray函数的调用是至关重要的,因为此时MEDIAARRAY被赋值
  • 确保在访问MEDIAARRAY的任何属性之前调用getFileArray
  • 确保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();
    }
    });
    

    错误状态VariableMediaArray在代码流中的某个位置保持未初始化状态。看看下面的内容是否能让您接近解决方案

  • 您还没有提到在什么时候调用getFileArray函数。对getFileArray函数的调用是至关重要的,因为此时MEDIAARRAY被赋值
  • 确保在访问MEDIAARRAY的任何属性之前调用getFileArray
  • 确保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();
    }
    });
    

    console.log(响应)打印什么?没有。。。我尝试了console.log的东西,但是在我的控制台中看起来都不错(或者不好)。log也尝试了那个,我确实注意到了一件事:它在我的CMS端给出了相同的错误。但是:当我更改语言选择器时,它不再给出错误,而是播放声音。但是当我不更改语言选择器时,它会抛出相同的错误。console.log(响应)打印什么?什么都没有。。。我尝试了console.log的东西,但是在我的控制台中看起来都不错(或者不好)。log也尝试了那个,我确实注意到了一件事:它在我的CMS端给出了相同的错误。但是:当我更改语言选择器时,它不再给出错误,而是播放声音。但是当我不更改语言选择器时,它抛出了相同的错误。Oke,当我提到getFileArray时确实发生了一些事情,它现在获取所有内容,但返回响应“无法读取未定义的属性'toLowerCase'”。Oke,当我提到getFileArray时确实发生了一些事情,它现在获取所有内容,但返回响应“无法读取未定义的属性'toLowerCase'”
    $(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();
    }
    });