【问题标题】:Why does ajax not post when I don't have a comma before send? [duplicate]当我在发送前没有逗号时,为什么ajax不发布? [复制]
【发布时间】:2016-02-20 16:34:10
【问题描述】:

所以我有一个非常简单的 ajax 设置,并且运行良好。

function ajax_post(){
    var hr = new XMLHttpRequest();
    var f = "foo";
    var j = "bar";
    hr.open("POST", "ajax7.php", true);
    hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    hr.onreadystatechange = function() {
        if(hr.readyState == 4 && hr.status == 200) {
            var rd = hr.responseText;
        }
    }
    hr.send("f="+f+"&j="+j);
}

然后我决定通过删除所有空格来缩小它,所以我最终得到了

function ajax_post(){var hr = new XMLHttpRequest();var f = "foo";var j = "bar";hr.open("POST", "ajax7.php", true);hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");hr.onreadystatechange = function(){if(hr.readyState == 4 && hr.status == 200){ var rd = hr.responseText;}}hr.send("f="+f+"&j="+j)}

它停止工作,引发错误。 语法错误:缺少;声明之前

所以,我终于通过在单行版本中的 hr.send 之前添加一个逗号来修复它并且它再次工作。

我的问题...那个逗号有什么意义?它在没有它的“扩展”版本中工作。我真的应该一直把那个逗号放在“扩展”版本中吗……?

【问题讨论】:

  • var foo = function(){}bar();var foo = function(){},bar();var foo = function(){}; bar(); 是三个非常不同的程序。虽然添加逗号可能会使程序在语法上正确,但它不会按您的意愿工作。

标签: javascript ajax


【解决方案1】:

那个逗号有什么意义?

逗号使程序在语法上正确。

var foo = function(){}bar();

完全无效,因为您不能在没有运算符的情况下让两个表达式(function(){}函数表达式bar()调用表达式)彼此相邻.逗号就是这样一个operator

逗号运算符计算其每个操作数(从左到右)并返回最后一个操作数的值。

var foo = function(){},bar();

由于逗号运算符的工作方式,这与直接将bar() 分配给foo 具有相同的效果:

var foo = bar();

因此,即使添加逗号使您的程序在语法上正确,它也不会产生您想要的结果。在您的特定情况下,这会将hr.send() 的返回值分配给hr.onreadystatechange,这真的没有任何意义:

// hr.onreadystatechange = function(){}, hr.send();
// is equivalent to
hr.onreadystatechange = hr.send();

您确实需要添加分号才能获得两个单独的语句:

var foo = function(){}; bar();

许多语句,例如变量声明语句,都以分号结尾。函数表达式后面的分号告诉解析器变量声明语句到此结束,后面的部分(bar();)是无关的。

【讨论】:

  • 感谢您的解释,我想我现在明白了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-16
  • 1970-01-01
  • 2015-12-26
  • 2017-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多