如何eval()我的jquery代码

时间:2011-08-21 07:08:28

标签: javascript eval

我正在使用Ajax将我的页面加载到div中。一切都很好,除了我不知道如何评估输出,所以我可以在加载的页面中编写javascript。如果有人知道如何,请告诉我。 tThanks!

这是我的代码:

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 个答案:

答案 0 :(得分:1)

先试试..

将div插入带有你在js中控制的id的页面..说id =“1234”然后执行以下操作..注意你的脚本标签应该在这个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);  

否则apprach应该是如下所示:

 // 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/

希望这会有所帮助..

答案 1 :(得分:0)

如果您正在使用格式正确的JSON,那么您将需要使用Douglas Crockford的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)家伙,但是现在我看不出任何争论,除非你自己写一个严肃的图书馆(我也做过)。