2013-02-15 40 views
1

我刚刚得到了JSONP的帮助下this great question的答案。现在,在我的设置中,HTML文件加载通过脚本标签的JavaScript:可以运行JavaScript代码加载JSONP而不是脚本标记吗?

<script src="js/playlistcontroller.js"></script> 

现在的问题是,可以将此代码,运行时,触发加载我的JSONP响应?

目标是避免

<script src="playlistcontent.jsonp"></script> 
在HTML头

,但这样做的东西在控制器(这恰好是一个AngularJS CONTROLER,如果你很好奇)。

这是可能的吗(从JavaScript加载JavaScript)?

+0

可能重复与SRC是可能包括document.write](http://stackoverflow.c om/questions/13121948/dynamic-add-script-tag-with-src-that-may-include-document-write) – bfavaretto 2013-02-15 19:53:29

回答

1

设施的跨浏览器测试脚本:

var CFLoad = { 
    fScript : null, 
    isFileReady : function (v) { 
     return (! v || v == "loaded" || v == "complete" || v == "uninitialized"); 
    }, 
    js : function(src,cb,attrs) { 
     var s = document.createElement("script"), 
      done = !1, i; 
     s.src = src; 
     s.type = "text/javascript"; 
     for (i in attrs) { 
      s.setAttribute(i, attrs[ i ]); 
     } 
     s.onreadystatechange = s.onload = function() { 
      if (! done && CFLoad.isFileReady(s.readyState)) { 
       done = !0; 
       if(cb) cb(s); 
       s.onload = s.onreadystatechange = null; 
      } 
     }; 
     window.setTimeout(function() { 
      if(!done) { 
       done = !0; 
       if(cb) cb(s,1); 
      } 
     }, 5000); 
     if(this.fScript===null) this.init(); 
     this.fScript.parentNode.insertBefore(s, this.fScript); 
    }, 
    css : function(href,cb,attrs) { 
     var l = document.createElement("link"),i; 
     l.href = href; 
     l.rel = "stylesheet"; 
     l.type = "text/css"; 
     for (i in attrs) { 
      l.setAttribute(i, attrs[i]); 
     } 
     if(this.fScript===null) this.init(); 
     this.fScript.parentNode.insertBefore(l,this.fScript); 
     if(cb) window.setTimeout(cb, 0); 
    }, 
    init : function() { 
     this.fScript = document.getElementsByTagName("script")[ 0 ]; 
    } 
}; 

使用

CFLoad.js("http://code.jquery.com/jquery-1.8.3.js", function (script_tag, failed) { 
    if(!failed) { 
     CFLoad.js("http://code.jquery.com/ui/1.9.2/jquery-ui.js", function(s, f) { 
      if(!f) { 
       alert("Loaded"); 
       js13 = jQuery.noConflict(true); 
       main(); 
      } 
     }) 
    } 
}); 

你的情况:

CFLoad.js("playlistcontent.jsonp"); 
[动态添加脚本标签的
+0

谢谢,我会试试看! – Marcel 2013-02-16 21:38:32

+0

我现在已经从这里找到了一个类似的脚本:http://www.nonobtrusive.com/2010/05/20/lightweight-jsonp-without-any-3rd-party-libraries/ – Marcel 2013-02-20 09:14:10

+0

是的,它做同样的事情,但被包装成仅用于JSON!很好的发现 – Birla 2013-02-20 16:43:21

相关问题