Javascript “@”在jquery ajax数据中作为非法字符

Javascript “@”在jquery ajax数据中作为非法字符,javascript,jquery,ajax,Javascript,Jquery,Ajax,我正在这样做一个Ajax调用 var data = { fn: "course_signup", cid: 1249, cemail: emaifield }; $.ajax({ type: "POST", url: "/AjaxHandler", data: data,

我正在这样做一个Ajax调用

var data = { fn: "course_signup", cid: 1249, cemail: emaifield };

                    $.ajax({
                        type: "POST",
                        url: "/AjaxHandler",
                        data: data,
                        success: function(data) {

                        },
                        error: function(xmlHttpRequest, textStatus, errorThrown) {

                        },
                        complete: function(data) {

                        }
                    });
正如您所看到的,在cemail字段中有一个@in,浏览器在这里抛出javascript错误

Error: SyntaxError: illegal character
Source Code:
var data = { fn: "course_signup", cid: 1249, cemail: as@asd.com

该电子邮件地址应为字符串:

var data = { fn: "course_signup", cid: 1249, cemail: "as@asd.com"  };
                                                     ^          ^

任何不是数字、布尔值或对象的值都应该用引号括起来。阅读不同的电子邮件,了解如何组织数据。

用双引号写电子邮件:

var data = { fn: "course_signup", cid: 1249, cemail: "as@asd.com"  };

您需要创建一个字符串:

var data = { fn: "course_signup", cid: 1249, cemail: "as@asd.com" };

这与jQuery没有任何关系。您的问题是它不是有效的javascript对象文字语法

字符串必须用引号括起来。除了键,如果它们具有有效的变量名

除非作用域中存在名为lol的变量,否则此选项无效:

var obj = {hey: lol};
这是

var obj = {hey: "lol"};
如果您的密钥不是有效的var名称,请同时引用它

var obj = {"123 hey there": "lol"};

在实际情况中,我对电子邮件字段使用了一个动态变量。它是一个C字符串,将在执行时呈现为电子邮件字符串。因此,我不可能将其插入双引号中。您仍然可以将其用C引号括起来,例如WebForms中的{cemail:},MVC.RGraham中的{cemail:@this.Model.EmailAddress},这将使您的代码容易受到攻击。使用cemail:@Html.RawHttpUtility.JavaScriptStringEncodethis.Model.EmailAddress进行MVC,并确保为WebForms进行JS编码。正在通知@Athul@SilverlightFox数据正在发送到服务器。如您所见,数据变量是在AJAX调用之外生成的,因此不会出现XSS。此外,razor HTML不是默认编码吗?但是,它是由服务器生成的,因此精心编制的字符串可能会脱离ajax调用的上下文并利用xss漏洞。在实际情况中,我对电子邮件字段使用动态变量。它是一个C字符串,将在执行时呈现为电子邮件字符串。所以我不可能在双引号中插入它。。。C!=JS。只需提前编写emailField,然后将其放入数据对象中。引号用于文字字符串。