无法调用Ajax Javascript方法

时间:2010-04-04 16:15:32

标签: javascript ajax

我使用此方法动态加载JavaScript函数。它确实包含.js文件,但是当我调用一个方法时,该方法表明它是未定义的。以下两个.js文件为ajax_object.jsuser_manager.js

该函数外部的警报被读取并起作用,但内部的警报不会。

enter code here
//ajax_object.js
//Load a javascript library
 function loadJavascript( src, url ){

XMLHttpRequestObject=getXmlHttpRequestObject();

if( XMLHttpRequestObject){

    XMLHttpRequestObject.onreadystatechange = function()
    {
        if (XMLHttpRequestObject.readyState == 4 ){


            if (XMLHttpRequestObject.status == 200 || XMLHttpRequestObject.status == 304) {
                includeJavaScript( src, url, XMLHttpRequestObject.responseText );
            }
        }
    }

}

XMLHttpRequestObject.open('GET', url, true);
XMLHttpRequestObject.send(null);

  }//end LoadJavaScript

 //Add Library to header
function includeJavaScript(src, fileUrl, xmlObject)  { 
if ( ( xmlObject != null ) && ( !document.getElementById( src ) ) ){ 
    var documentHead = document.getElementsByTagName('HEAD').item(0);
    var includeScript = document.createElement( "script" );
    includeScript.language = "javascript";
    includeScript.type = "text/javascript";
    //includeScript.id = src;
    includeScript.src=fileUrl.concat(src);
    includeScript.defer = true;
    includeScript.text = xmlObject;
    documentHead.appendChild( includeScript );
} 
  } 

//user_manager.js
 //First alert is read
 alert("Outside User Manager");
  function selectUserManagerModuleType(){
XMLHttpRequestObject=getXmlHttpRequestObject();
//This doesn't work
    //throws selectUserManagerModuleType undefined
alert("Inside The User Manager");



    }

2 个答案:

答案 0 :(得分:0)

问题来自异步vs同步。使用JQuery,解决方案变得非常简单。

function loadJavascript( src, url ){

    $.ajaxSetup({async: false});
    $.getScript(url.concat(src));
    $.ajaxSetup({async: true});

}

答案 1 :(得分:0)

你的代码有点奇怪,你们都给脚本块一个src和一个正文,看似包含相同的脚本。

我看到有两种方法可以做到这一点,要么只是在标题中添加一个脚本块,包括一个src,不需要ajax调用(之前我从未见过这样做,所以不能保证会发生什么)。或者你使用ajax调用加载脚本并且eval返回的内容,你必须要注意范围,否则你可能最终让下载的脚本在eval的函数范围内声明了东西,但是否则它是pice of pice饼。

如果用以下内容替换includeJavaScript调用:

eval("with(window){"+XMLHttpRequestObject.responseText+"}")

我不明白为什么它不起作用。