【问题标题】:Syntax Error on Javascript?Javascript 的语法错误?
【发布时间】:2015-06-29 22:22:26
【问题描述】:

嘿,我做错了什么?我的 JS 文件停止工作,我尝试了不同的方法,但它不起作用。我想通过单击带有“id”的按钮来启动该功能。

$(document).ready(function () {
    $("#paybutton").click(function () {}
    var params = ("projectpaymentoption=1197&id=");
    var usernamepay = window.localStorage.getItem("username");
    var paymenturl = params + usernamepay;
    }

    $.ajax({
        type: 'post',
        url: 'http://www.bla.de/phone/encode.php',
        data: {
            data: {
                "usernamepay": usernamepay
            },
        }
        success: function (result) {
            console.log(result);
        }
    });

【问题讨论】:

  • 试试jshint.com。提示:正确缩进代码以发现语法错误。
  • 使用一些合理的缩进,额外的} 可能更容易被发现。 ...实际上,我认为我看到了三个。一切都错了。 ...哦等等,也许只有两个。但没有右括号和括号。这么难读。
  • 控制台有没有说什么?
  • @tne 否。代码审查是针对有效的代码。这不是调试服务。
  • @Juhana 我已经纠正了。

标签: javascript ajax syntax


【解决方案1】:

问题:

你没有关闭所有的括号,我认为你关闭了点击回调函数太早了。您没有正确结束括号。您的 ajax 调用超出了 click 处理程序和 ready 函数的范围。

注意:您需要学习使用缩进、括号放置和 cmets 来帮助您将代码块视为执行的不同部分,这样您就可以发现像 ajax 调用这样的事情只被触发一次(没有正确的变量)而不是在那个允许它发生多次的点击处理程序中。

在变量赋值中你不需要在你的字符串周围加上括号。

编辑:下一部分是角度特定的,不是 jquery,但不是无效的 .ajax() 要求 post 请求中的数据为字符串格式,而不是对象格式。

解决方案:

重新组织代码以显示缩进并更正闭包,包括结尾 });这是需要的。

去掉括号,将变量声明合并到一个var语句中(可读性和效率/文件大小)

使用'use strict'也是个好主意

我使用$.param(obj) 来格式化传递的数据。

代码:

'use strict';
$(document).ready( function() {
  $("#paybutton").click(function() {
    var params = "projectpaymentoption=1197&id=",
                usernamepay = window.localStorage.getItem("username"),
                paymenturl = params + usernamepay;

    $.ajax({
      type: 'POST',
      url: 'http://www.bla.de/phone/encode.php',
      data: $.param({"usernamepay": usernamepay}),
      success: function(result) {
        console.log(result);
      }
    }); // end of ajax call
  }); // end of #payButton click handler
}); // end of document.ready function

【讨论】:

  • .ajax() 要求 post 请求中的数据采用字符串格式而不是对象格式 - false。根据the docsdata 可以具有 PlainObject 或 String 或 Array 类型。
  • @MarkAmery 在下面是正确的。如果您要进行编程,您需要能够弄清楚这些事情。整齐格式化的代码是第一步。如果你不自己解决这些问题,你永远学不会。
  • Mav,我同意您需要学习如何查找语法问题,@MarkAmery 是的,您是对的,与角度 stackoverflow.com/q/31096056/4705221 混淆了
【解决方案2】:

下面的格式化代码。下次请使用一些IDE。

$(document).ready(function... 函数已关闭,底部有});$("#paybutton").click(function(){.. 已被 }); 适当关闭

删除了额外的data: { 声明,在success: function() 之前放置一个,。还更正了其他缩进。

$(document).ready( function() {
    $("#paybutton").click(function() {
        var params = ("projectpaymentoption=1197&id=");
        var usernamepay = window.localStorage.getItem("username");
        var paymenturl = params + usernamepay;
        $.ajax({
             type: 'post',
             url: 'http://www.bla.de/phone/encode.php',
             data: {"usernamepay": usernamepay},
             success: function(result) {
             console.log(result);
              }
        });                         
    });
});

【讨论】:

  • 这个缩进和原来的一样糟糕,而且代码也不完全正确。如果您要留下答案,请将其弄清楚并准确解释您所做的更改。
  • 这很公平!所以从下次开始吧!!不用担心:)
【解决方案3】:

您应该使用一些 IDE(或至少一些可以帮助您进行语法着色和括号匹配的程序 - notepad++ 可能很棒)并为您的代码添加一些缩进

这是您的代码缩进,以及我在那里添加的一些 cmets。
通过这种方式,您可以了解问题所在以及如何解决这些问题。

$(document).ready( function() {
    $("#paybutton").click(function() {
            // Nothing here
        } // <-- Here you should close the click function (from two lines above), missing )
        var params = ("projectpaymentoption=1197&id=");
        var usernamepay = window.localStorage.getItem("username");
        var paymenturl = params + usernamepay;
    }

    $.ajax({
        type: 'post',
        url: 'http://www.bla.de/phone/encode.php',
        data: {
            data: {"usernamepay": usernamepay},
        } // <-- Here you should have a comma. Elements of object are separated with commas, just like your previous lines
        success: function(result) {
            console.log(result);
        }
    });

// <-- Here you should close the ready function (from the first line), missing )

【讨论】:

  • 感谢您的帮助,但不起作用:(当我将函数插入到我完全工作的 js 文件中其他函数的位置时,其他函数停止工作。
  • 这比提问者应得的要多。除了他们之外,它永远不会帮助任何人,如果他们对语法错误的回应是无助地将他们的代码转储到互联网上供其他人修复,那么他们将无能为力(正如他们对您的回复所示)。你的时间是你自己的(我不是反对者),但我敢肯定,除了帮助这个问题的作者之类的人之外,你还可以做更有价值的事情。
  • @squint,不确定究竟什么是“仍然不正确”。代码不是“应该工作的最后一块”。有一个关于如何使它工作的解释,以及他应该把东西放在哪里的提示。 ajax 调用可能在点击中,并且可能在页面加载中。这是我无法提前知道的——代码所有者应该知道把它放在哪里。 mav,也许您应该删除部分代码并检查何时以及什么确切有效。
  • @Dekel:这是你的答案,所以我认为你应该能够弄清楚......但无论如何,还有一个额外的 } 你没有注意到并且你没有注意到最终失踪} 在最后失踪) 之前,您确实注意到了。此外,您真的认为 OP 想要一个空的点击处理程序吗?这超出了语法问题,但仍然......
  • @squint,没有多余的} - 它存在于第 5 行。我真的不认为我们应该更改代码来做我们认为 OP 想要的 - 这个想法是帮助和解释问题是什么,以便 OP 理解并有能力自行修复它。至于“不工作” - 问题不是缺少括号,而是错误地将代码放入函数中:)(OP代码)
【解决方案4】:

“成功”字段前需要一个逗号。如果在代码中不是必需的,但在数据对象文字中,它将是必需的。这是一个问题,但可能还有更多问题。

【讨论】:

    猜你喜欢
    • 2013-10-26
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    相关资源
    最近更新 更多