在Velocity中使用jQuery时出现语法/解析错误

时间:2012-12-26 04:06:44

标签: javascript jquery

<script type="text/javascript>
(function($, win) {
function mySettingsInitJS () {  

    var self = this;
    var opts = {
        'params' : "userId=" + userId;
    }; 
    self.init = function() {
        self.initUnlinkAction();
    };
    self.initbtnAction = function() {
        $('#Btn').click(self.btnAction);
    };

    self.btnAction = function(e) {
        if(e) { e.preventDefault(); }
        jQuery.post(
        'http://abc/rest/PostRequest', 
        opts.params, function(data) {
        alert('This worked!');
        }, "json");                         
    };

}
function win.MyFilesSettingsInitJS = new MyFilesSettingsInitJS();
}(jQuery, window));
</script>

我在速度模板页面中有这个脚本,还有一个Btn。这基本上是一个花哨的链接。我也确定服务器端的其余API工作正常。但不知怎的,我的java脚本函数没有被调用。有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:0)

好像你忘记了这里的引语:

'http://abc/rest/PostRequest'

语法高亮显得非常明显。另外,如果你使用JSLint或类似的话,它会发现大多数问题,以及调试代码时的控制台。

答案 1 :(得分:0)

您的网址值必须是字符串...添加引号

答案 2 :(得分:0)

您应该使用浏览器中提供的一些开发人员工具。大多数浏览器至少有一个错误控制台,可以显示任何JS错误。例如,此代码有几个语法错误:

  1. var opts = { 'params' : "userId=" + userId; };中,当您定义对象文字(a.k.a.地图或字典)时,使用;结束一行是违法的。
  2. 再次在这一行,userId定义在哪里?拥有全局变量是一种不好的做法,因此如果userId是另一个脚本中定义的全局变量,则应该重构代码
  3. function win.MyFilesSettingsInitJS = new MyFilesSettingsInitJS();是非法的,因为您要向对象添加属性,而不是声明函数或变量。只需使用win.MyFilesSettingsInitJS = new MyFilesSettingsInitJS();
  4. 即可
  5. 实际上,这可能也是错误的,因为上面你定义了mySettingsInitJS,而不是MyFilesSettingsInitJS(但是这个函数实际上可以在其他地方定义,我没有完整的代码)