как eval () мой код jquery - PullRequest
       12

как eval () мой код jquery

0 голосов
/ 21 августа 2011

Я загружаю свои страницы в div с помощью Ajax.Все хорошо, за исключением того, что я не знаю, как оценить вывод, чтобы я мог написать javascript на загруженных страницах.Если кто знает как, подскажите пожалуйста.Спасибо!

Это мой код:

var bustcachevar = 1 //bust potential caching of external pages after initial request? (1=yes, 0=no)
var loadedobjects = ""
var rootdomain = "http://" + window.location.hostname
var bustcacheparameter = ""

function ajaxpage(url, containerid) {
    var page_request = false
    if (window.XMLHttpRequest) // if Mozilla, Safari etc
    page_request = new XMLHttpRequest()
    else if (window.ActiveXObject) { // if IE
        try {
            page_request = new ActiveXObject("Msxml2.XMLHTTP")
        }
        catch (e) {
            try {
                page_request = new ActiveXObject("Microsoft.XMLHTTP")
            }
            catch (e) {}
        }
    }
    else return false page_request.onreadystatechange = function() {
        loadpage(page_request, containerid)
    }
    if (bustcachevar) //if bust caching of external page
    bustcacheparameter = (url.indexOf("?") != -1) ? "&" + new Date().getTime() : "?" + new Date().getTime()
    page_request.open('GET', url + bustcacheparameter, true)
    page_request.send(null)
}

function loadpage(page_request, containerid) {
    if (page_request.readyState == 4 && (page_request.status == 200 || window.location.href.indexOf("http") == -1)) document.getElementById(containerid).innerHTML = page_request.responseText eval(responseText);
}

function loadobjs() {
    if (!document.getElementById) return for (i = 0; i < arguments.length; i++) {
        var file = arguments[i]
        var fileref = ""
        if (loadedobjects.indexOf(file) == -1) { //Check to see if this object has not already been added to page before proceeding
            if (file.indexOf(".js") != -1) { //If object is a js file
                fileref = document.createElement('script')
                fileref.setAttribute("type", "text/javascript");
                fileref.setAttribute("src", file);
            }
            else if (file.indexOf(".css") != -1) { //If object is a css file
                fileref = document.createElement("link")
                fileref.setAttribute("rel", "stylesheet");
                fileref.setAttribute("type", "text/css");
                fileref.setAttribute("href", file);
            }
        }
        if (fileref != "") {
            document.getElementsByTagName("head").item(0).appendChild(fileref)
            loadedobjects += file + " " //Remember this object as being already added to page
        }
    }

}

ТЕКСТ ОТВЕТА:

        <div id="mySingleMenu"><?php include("single-menu.php"); ?></div>

        <div id="mySingleContent">
        <?php if (have_posts()) : ?>
            <?php while (have_posts()) : the_post(); ?>    

                <?php the_title(); ?>
                <?php the_excerpt(); ?>

            <?php endwhile; ?>     
        <?php endif; ?>
        </div>

    <script>
    $('#mySingleMenu').hide();

</script>

ИСПРАВЛЕНО: http://www.javascriptkit.com/script/script2/ajaxpagefetcher.shtml

Ответы [ 2 ]

1 голос
/ 21 августа 2011

попробуйте сначала ..

вставьте div на страницу с идентификатором, который вы контролируете в js .. say id = "1234", а затем выполните следующее .. обратите внимание, ваш тег script должен находиться внутри этого div

var d =
document.getElementById("1234").getElementsByTagName("script")
var t = d.length
for (var x=0;x<t;x++){
var newScript = document.createElement('script');
newScript.type = "text/javascript";
newScript.text = d[x].text;
document.getElementById('divContents').appendChild (newScript);  

иначе значение должно быть примерно таким:

 // Suppose your response is a string:
// { html: "<p>add me to the page</p>, script:"alert('execute me');" }
var obj = eval( "(" + response + ")" ) ;
eval( obj.script ) ;

чтобы вы правильно поняли, вам нужно вырезать часть кода из кода и затем оценить ее ..

либо это, либо вы можете использовать библиотеку, такую ​​как jquery, и в этом случае все, что вам нужно сделать, это использовать html () api, и он позаботится о том, чтобы выполнить скрипт для вас ..

другой способ - вставить скрипт на страницу, которую вы можете сделать следующим образом:

var headID = document.getElementsByTagName("head")[0];         
var newScript = document.createElement('script');
newScript.type = 'text/javascript';
newScript.src = 'http://www.somedomain.com/somescript.js';  //newScript.innerHTML= ""; //your script code
headID.appendChild(newScript);

для этого тоже есть взлом. читать это: http://www.thedanglybits.com/2007/06/22/execute-javascript-injected-using-innerhtml-attribute-even-with-safari/

Надеюсь, это поможет ..

0 голосов
/ 21 августа 2011

Если вы возвращаете должным образом отформатированный JSON, вам нужно использовать библиотеку JSON Дугласа Крокфорда: http://www.json.org/js.html

Однако ... весь ваш кодовый набор несколько устарел.Есть причина, по которой библиотеки вступили во владение, ускорив разработку и уменьшив количество ошибок.

Фактически, здесь весь ваш код, переписанный как jquery:

var bustcachevar = 1 //bust potential caching of external pages after initial request? (1=yes, 0=no) var loadedobjects = [];

function loadpage(page_request, containerid) {
    page_request = bustcachevar ? page_request + Math.rand() : page_request;
    $('#'+containerid).load(page_request);
    // This assumes what is coming back is HTML.  
    //If you're getting back JSON, you want this:
    // $.ajax({url:page_request, success:function(responseText){}}); }
    // Note that responseText is actually a pre-eval'd object.
function loadobjs() {
    if (!document.getElementById) return
    for (var i = 0; i < arguments.length; i++) {
        var file = arguments[i];
        var fileref = "";
        if ($.inArray(file, loadedobjects) < 0)
        {
            if (file.indexOf(".js") != -1) 
            { //If object is a js file
                fileref = $('<script>').attr('type', 'text/javascript').attr('src', file);
            } 
            else
            {
                fileref = $('<link>').attr('rel', 'stylesheet').attr('type', 'text/css').attr('href', file);
            }
            $('head').append(fileref);
            loadedobjects.push(file);
        }
    } 
}

Хотя вы, возможно, и не будетеЗная особенности синтаксиса, вы должны быстро увидеть, что это JS, и его краткость должна сделать его довольно легко читаемым.Я был парнем из POJ (обычный старый javascript) в течение многих лет, но я просто не вижу никаких аргументов для этого в наши дни, если вы сами не пишете серьезную библиотеку (что я тоже сделал).

...