从jQuery Ajax调用中捕获嵌入变量

时间:2012-06-04 19:50:54

标签: javascript jquery ajax variables

我正在尝试将当前的javascript框架转换为jQuery,因为我们需要jQuery的其他功能来进行更多项目。有一个特定的功能到处都是(并且设置了它是如何设置的......)我想用jQuery等效覆盖它。这是对php页面进行ajax调用的原始Javascript函数。

function ajax(n,f,v){
    var ajaxRequest;
    if(window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
        ajaxRequest=new XMLHttpRequest();
    }
    else{// code for IE6, IE5
        ajaxRequest=new ActiveXObject("Microsoft.XMLHTTP");
    }
    ajaxRequest.onreadystatechange=function(){
        if(ajaxRequest.readyState==4 && ajaxRequest.status==200){

            //This is where the result is stored
            result = ajaxRequest.responseText;
            //parseScript pulls out the content and the div and populates the div with the retrieved content.
            parsed_result = parseScript(result);
            document.getElementById(parsed_result.div).innerHTML = parsed_result.source;
        }
    }
    ajaxRequest.open("GET","view.php?n="+n+"&f="+f+"&v="+v+"&time="+(new Date).getTime(),true);
    ajaxRequest.send();
}

function parseScript(_source) {
    var source = _source;
    var scripts = new Array();

    while(source.indexOf("<script") > -1 || source.indexOf("</script") > -1) {
        var s = source.indexOf("<script");
        var s_e = source.indexOf(">", s);
        var e = source.indexOf("</script", s);
        var e_e = source.indexOf(">", e);

        scripts.push(source.substring(s_e+1, e));
        source = source.substring(0, s) + source.substring(e_e+1);
    }

    for(var i=0; i<scripts.length; i++) {
        try {
            eval(scripts[i]);
            var div = div;
        }
        catch(ex) {
        }
    }

    return {source: source, div: div};
}

这是刚刚检索的页面顶部(因此是parseScript函数)。此div变量告知放置检索内容的位置。

<script>
    var div = 'content_1';
</script>
<!-- some retrieved html -->

jQuery函数我只想“设置在javascript函数的顶部”将要求我根本不编辑检索ajax文件。请参阅下面的我对jQuery调用的尝试。

function jAjax(n,f,v) {
$.get('view.php', 'n='+n+'&f='+f+'&v='+v, function(result) {
        if(result) {
            if($('#'+result.div).length) {
                $('#'+result.div).html(result);
            } else {
                console.log("Couldn't find the div= "+result.div);
            }
        } else {
            console.log("Couldn't find the names for n="+n+' f='+f+' v='+v);
        }
    });
}

所以我的问题是如何使用jQuery从ajax调用中捕获变量,以便我可以使用检索到的html填充捕获div?

还有一件事,是的,除了这样做之外,我可以想出一些方法来做到这一点,但是当我到达这里时,这种方式对于已经设置好的当前框架来说是最简单的。所以,请仅建议从ajax脚本中检索变量的方法。非常感谢!

1 个答案:

答案 0 :(得分:0)

没有内置的方法来获取通过jquery ajax方法检索的javascript文件中的变量值。但是,您可以在$ .get回调中调用parseScript函数:

$.get('view.php', 'n='+n+'&f='+f+'&v='+v, function(result) {
        if(result) {
            parsed_result = parseScript(result);

            if($('#' + parsed_result.div).length) {
                $('#' + parsed_result.div).html(parsed_result.source);
            } else {
                console.log("Couldn't find the div= " + parsed_result.div);
            }
        } else {
            console.log("Couldn't find the names for n="+n+' f='+f+' v='+v);
        }
    });

修改

您可能必须使用较长的$ .ajax(...)方法进行此调用,并将内容类型设置为文本,因为页面中有脚本标记。

编辑(替代):

您可以简单地在$ .get回调中引用变量'div',因为此时脚本将被执行:

$.get('view.php', 'n='+n+'&f='+f+'&v='+v, function(result) {
        if(result) {               

            if($('#' + div).length) {
                $('#' + div).html(result);
            } else {
                console.log("Couldn't find the div= " + div);
            }
        } else {
            console.log("Couldn't find the names for n="+n+' f='+f+' v='+v);
        }
    });