Jquery 延迟AJAX下载脚本的执行,以便将值返回给调用它的函数
我不知道该怎么问这个问题,但我还是要问。请注意,这是基于我的场景的过度点画代码 如下所述,我在客户机上有一个JavaScript函数,它调用服务器来检索数据,可能是HTML或JS。我想在许多场景中重用被调用的函数,所以我不想硬编码服务器返回的内容类型。我遇到的问题是,当AJAX返回时,它已经对JS进行了评估,我不确定如何从JS中获得结果,以便将其附加到我希望的DOM中 我相信我不必解释,但事件链是:Jquery 延迟AJAX下载脚本的执行,以便将值返回给调用它的函数,jquery,Jquery,我不知道该怎么问这个问题,但我还是要问。请注意,这是基于我的场景的过度点画代码 如下所述,我在客户机上有一个JavaScript函数,它调用服务器来检索数据,可能是HTML或JS。我想在许多场景中重用被调用的函数,所以我不想硬编码服务器返回的内容类型。我遇到的问题是,当AJAX返回时,它已经对JS进行了评估,我不确定如何从JS中获得结果,以便将其附加到我希望的DOM中 我相信我不必解释,但事件链是: 用户点击按钮 单击routed to function dummy Function dummy
$(document).ready(function() {
$(".getcanvas").click(function(e){
dummy("/someurl");
});
}
function fetch(obj) {
var defaults, settings, oD, oS, oX;
if (!(obj.url === undefined)) {
defaults = {type:"GET",timeout:4000,async:false,success:function(iD,iS,iX){oD=iD;oS=iS;oX=iX;}};
settings = $.extend({}, defaults, obj);
$.ajax(settings);
}
return {"data":oD, "status":oS, "state":oX};
}
function get(url) {
var s = fetch({url: url});
return s.data;
}
function dummy(url) {
$("div#canvas").append(get(url));
}
function dothis(json) {
var res = '';
json = $.parseJSON(json);
$.each(json.objects, function(index, object) {
res += '<div id="+object.id+">'+object.message+'</div>';
}
return res;
}
$(文档).ready(函数(){
$(“.getcanvas”)。单击(函数(e){
虚拟(“/someurl”);
});
}
函数获取(obj){
变量默认值、设置、oD、oS、oX;
如果(!(obj.url==未定义)){
默认值={type:“GET”,超时:4000,异步:false,成功:函数(iD,iS,iX){oD=iD;oS=iS;oX=iX;};
设置=$.extend({},默认值,obj);
$.ajax(设置);
}
返回{“数据”:oD,“状态”:oS,“状态”:oX};
}
函数get(url){
var s=fetch({url:url});
返回美国数据;
}
函数虚拟(url){
$(“div#canvas”).append(get(url));
}
函数dothis(json){
var-res='';
json=$.parseJSON(json);
$.each(json.objects,函数(索引,对象){
res+=''+对象。消息+'';
}
返回res;
}
HTML:
某物
服务器@/someurl:
<script>
var o = '{objects:[{id:57,message:"testing"},{id:45,"somethingnew"}]}';
dothis(o);
</script>
var o='{objects:[{id:57,消息:“testing”},{id:45,“somethingnew”}]}';
dothis(o);
为什么不直接从服务器返回不带
标记的代码,然后再附加脚本标记呢
编辑
您可以像这样附加它:
$("div#canvas").append("<script>" + get(url) + "</script>");
$(“div#canvas”).append(“+get(url)+”);
您不能使用回调吗?否则,这就有点违背了异步JavaScript和XML的观点。同步XHR是个坏主意。async:false
不推荐使用(参见文档)而且很少有有效的用例使用它。可以使用成功回调或$。deffered
来处理您的needs@minitech我使用回调函数将数据返回给调用者。对于另外两个,这仍然不能回答如何将被调用函数生成的数据返回给原始调用者的问题我想了很多,所以我会接受这个,但我需要一个虚拟函数来接受HTML或脚本。我不知道你为什么希望它是HTML,但是如果它对你的项目有意义,你可以将脚本包装成一个div
标记而不是script
标记,然后在客户端的script
标记中重新包装它。
$("div#canvas").append("<script>" + get(url) + "</script>");