Ajax Javascript метод не может быть вызван - PullRequest
1 голос
/ 04 апреля 2010

Я сделал этот метод для динамической загрузки функций JavaScript. Он включает в себя файл .js, но когда я вызываю метод, метод говорит, что он не определен. Следующие два .js файла: ajax_object.js и user_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 голосов
/ 04 апреля 2010

Ваш код немного странный, вы оба предоставляете блоку сценария src и body, по-видимому, содержащие один и тот же сценарий.

Я вижу два способа сделать это, либо вы просто добавляете блок сценария в заголовок, включая src, для этого не требуется никакого вызова ajax (я никогда не видел, чтобы это было сделано раньше, поэтому нет никаких гарантий относительно того, что произойдет). Или вы загружаете сценарий с помощью вызова ajax и проверяете возвращаемое содержимое, вам нужно остерегаться области действия, в противном случае вы можете в конечном итоге получить загруженный сценарий, объявляющий вещи в области действия функции, выполняющей eval, но в противном случае это кусочек торт.

Если вы замените вызов includeJavaScript на:

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

Я не понимаю, почему это не должно работать.

0 голосов
/ 04 апреля 2010

Проблема пришла к асинхронному против синхронного. Решение стало очень простым с JQuery.

function loadJavascript( src, url ){

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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...