javascript - 为什么当我发送前没有逗号时,ajax 不发送?

标签 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)}

它停止工作并抛出错误。 语法错误:缺少;之前的声明

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

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

最佳答案

What is the significance of that comma?

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

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

根本无效,因为您不能有两个表达式(function(){} 是一个函数表达式bar() 是一个 < em>调用表达式) 彼此相邻,没有运算符。逗号就是这样的 operator :

The comma operator evaluates each of its operands (from left to right) and returns the value of the last operand.

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

关于javascript - 为什么当我发送前没有逗号时,ajax 不发送?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35525937/

相关文章:

javascript - 如何确定所有ajax请求都已解决?

javascript - 单击后显示对话框弹出刷新页面

javascript - 如何在rails中将json转换为html

Javascript:使用按钮从选择输入动态添加字段

javascript - 独立滚动父子div

javascript - 使用 graphql 模式语言的嵌套查询

javascript - Rails 和 Ajax 请求 : internal server error (500)

javascript - 在成功调用 ajax 后使用 jQuery 将类添加到元素

javascript - rails 上的 ruby : How to send an AJAX request to rails controller from login popup along with user given credentials

javascript - 向下滚动到 jquery 中的下一个 div