为什么ajax在发送之前没有逗号时不发帖?

时间:2016-02-20 16:34:10

标签: javascript ajax

所以我有一个非常简单的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)}

它停止工作,抛出错误。 SyntaxError:missing;在陈述之前

所以,我最后通过在一行版本的hr.send之前添加一个逗号来修复它,它又重新运行了。

我的问题......这个逗号有什么意义?它适用于"扩展"没有它的版本。我真的应该把这个逗号放在"扩展"版本一直......?

1 个答案:

答案 0 :(得分:3)

  

这个逗号有什么意义?

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

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();)是不相关的。