0

我不确定如何问这个问题,但这里是。请注意,这是基于我的场景的过度提示代码。

如下所述,我在客户端上有一个 JavaScript 函数,它调用服务器来检索数据,可能是 HTML 或 JS。我想在很多场景中重用被调用的函数,所以我不想硬编码服务器返回的内容类型。我遇到的问题是当 AJAX 返回时,它已经评估了 JS,我不确定如何从 JS 获取结果以附加到我想要它去的 DOM。

我确信我不必解释,但事件链是:

  1. 用户点击按钮
  2. 点击路由到功能虚拟
  3. 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>
4

1 回答 1

0

为什么不直接从服务器返回不带<script>标签的代码,然后在后面附加脚本标签。

编辑

您可以像这样附加它:

$("div#canvas").append("<script>" + get(url) + "</script>");
于 2012-12-22T15:50:12.770 回答