启动参数时未捕获的ReferenceError

时间:2013-08-13 15:10:17

标签: javascript

我正在尝试为拖动时使用的javascript添加额外的初始值 通过鼠标在网页中的对象。

当我尝试使用刚刚初始化的全局变量时,我得到了 以下错误:

“未定义的ReferenceError prefixPicSlot未定义

当我进入由mouseup / down事件调用的拖动函数时 这些变量是可访问的 - 它们似乎不是 在初始化功能中可用。

以下是调用的初始化代码:

initialize:function()
{

    this.getJsonParams()
    this.getPicnVidImageParams()
    document.onmousedown=this.drag      // Manages when the mouse is down and dragging 
    document.onmouseup=this.videoslot   // Manages when the dragging has been stopped
    $(document).on("change", "form", this.formChange)
    $(document).on("click", "button", this.selectButton)

}, //initialize

getJsonParams顾名思义从服务器获取参数并且工作正常。

getPicnVidParams是刚刚添加和使用的新初始函数 在getJsonParams中设置变量以创建要在其中使用的新变量 鼠标事件。当我把它放在this.drag函数中时,这个函数工作正常, 但只有在开始时调用它而不是每次鼠标事件都会更有效率。

以下是getJsonParams中创建变量的一段代码 在getPicNvidParams中使用并且工作正常:

//Get Admin data....                     
jsAdmin = $.ajax("getJsAdmin" )
.done(function(data, textStatus, jsAdmin) { 
    // Success !!!
    var tmpText = jsAdmin.responseText.replace("[", "")
    tmpText = tmpText.replace("]", "")          
    admin = JSON.parse( tmpText)            
    vidPreviewHtml = admin.vidPreviewHtml
    debugStatus = admin.jsDiagnostics                        
    prefixPicSlot = admin.prefixPicSlot                      
    prefixVidSlot = admin.prefixVidSlot                      
})
.fail(function() { alert("getJsAdmin - error"); })

这里第一部分getPicnVidParams代码的第一部分失败了

非评论行 - firstPicSlot = prefixPicSlot +“0” ...

getPicnVidImageParams:function(e){   

// get the important image params from the first picture and 
// video slots display

firstPicSlot = prefixPicSlot + "0"
firstPicSlotElem=document.getElementById(firstPicSlot.toString())
firstPicInnerHTML = firstPicSlotElem.innerHTML
firstPicSlot = "#" + firstPicSlot

firstVidSlot = prefixVidSlot + "0"
firstVidSlotElem=document.getElementById(firstVidSlot.toString())
firstVidInnerHTML = firstVidSlotElem.innerHTML
firstVidSlot = "#" + firstVidSlot

try{ picWidth = $(firstPicSlot).children("img").attr("width")}
catch(err)
{
    alert("FN: getPicnVidImageParams error (picWidth)" 
        + " \n"  +
        " firstPicSlot: "+ firstPicSlot
    ) 
}                                                                           

在这些初始化函数中设置全局变量似乎很奇怪 无法访问他们的设置,但在鼠标事件驱动中可以看到 功能

我正在使用Chrome。

2 个答案:

答案 0 :(得分:1)

您的问题是AJAX是异步的,因此this.getPicnVidImageParams()实际上是在getJsonParams()分配您的变量之前调用的。您需要将this.getPicnVidImageParams()放在ajax调用的.done函数的末尾。

答案 1 :(得分:0)

getJsonParams中的ajax调用是异步的(ajax中的第一个'a'),这意味着您的javascript程序将在后台发出HTTP请求时继续执行。基本上,在HTTP请求完成之前调用getPicnVidImageParams。将getPicnVidImageParams调用移动到ajax成功处理程序(done函数)将为您提供所需的结果。