我不确定如何问这个问题,但这里是。请注意,这是基于我的场景的过度提示代码。
如下所述,我在客户端上有一个 JavaScript 函数,它调用服务器来检索数据,可能是 HTML 或 JS。我想在很多场景中重用被调用的函数,所以我不想硬编码服务器返回的内容类型。我遇到的问题是当 AJAX 返回时,它已经评估了 JS,我不确定如何从 JS 获取结果以附加到我想要它去的 DOM。
我确信我不必解释,但事件链是:
- 用户点击按钮
- 点击路由到功能虚拟
- Function dummy 通过 AJAX 从 Server 加载数据,可能是 HTML 或 JS
我希望将 AJAX 调用的结果路由回函数 dummy,以便它可以将数据附加到 id 为“canvas”的 div。我不想使用 eval,而且我对 call 和 apply 方法感到困惑,它们看起来好像很有用,但我不知道。我不想在服务器上创建内容并发送它。我希望客户端处理 UI 元素。
我应该怎么做才能解决这个问题,或者有没有更好的方法来做我需要做的事情?
谢谢
客户端 JS/JQuery:
$(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;
}
HTML:
<html>
<head><title>Something</title></head>
<body>
<div id="canvas"/>
<input type="button" class="getcanvas" />
</body>
</html>
服务器@/someurl:
<script>
var o = '{objects:[{id:57,message:"testing"},{id:45,"somethingnew"}]}';
dothis(o);
</script>