Javascript 从jqueryajax调用捕获嵌入变量
我正在尝试将我们当前的javascript框架转换为jQuery,因为我们需要jQuery的附加功能来进行进一步的项目。有一个特定的函数到处都是(它是如何设置的……),我想用一个jQuery等价物覆盖它。下面是对php页面进行ajax调用的原始Javascript函数Javascript 从jqueryajax调用捕获嵌入变量,javascript,jquery,ajax,variables,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,
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};
}
所以我的问题是如何使用jQuery从ajax调用中捕获变量,以便用检索到的html填充该捕获div
还有一件事,是的,除了这样做之外,我可以想出很多方法来做,但是在我来到这里时已经建立好的当前框架下,这种方法将是最简单的。因此,请仅建议从ajax脚本检索变量的方法。非常感谢 没有内置的方法来获取通过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(…)方法进行此调用,将内容类型设置为text,因为页面中有一个脚本标记
编辑(可选):
您只需在$.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);
}
});
不太清楚你想做什么。请求的响应是什么?您打算如何处理它?@Jivings请求的响应是一些html,将填充到站点上的某个div中。div变量告诉ajax将该div放在哪里。我知道当ajax调用html页面时,jQuery会执行任何嵌入式Javascript。我只需要在我的jQuery等价函数中捕获检索到的页面上的div变量的值。这是一个不错的解决方案。我有点想避开parseScript函数。我唯一能想到的另一件事是做几个indexOf()来查找“var div=”,然后找到下面的“”。好建议。我是通过使用正则表达式来实现的。我尝试了你的替代建议,但它从未将div变量作为局部变量,我可以利用它(
$.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);
}
});
$.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);
}
});