javascript - 使用 ajax 提交表单会导致 Charset 出现奇怪的行为

标签 javascript jquery ajax

我在使用 Ajax 发布表单时遇到问题。

这是我的 jQuery 代码:

    <script type="text/javascript" language="javascript" charset="utf-8">
    $(document).ready(function(){
      $("#newdata").submit(function(event) {          
        event.preventDefault();          
        $.post( "save.asp",  $("#newdata").serialize() , 
          function( data ) {  
        });           
      });
    });
    </script>

问题是,当我提交带有特殊字符(如 ®©)的数据时,它会在其前面加上一个 来保存它。但是,如果我在没有 jQuery/Ajax 的情况下提交,它不会使用此 字符格式化数据。有谁知道我为什么会遇到这个问题?

最佳答案

http://jsfiddle.net/aTS67/2/

问题出在 .serialize() 方法上(这不是真正的问题,它应该这样做)。正如您从我上面的演示中看到的那样,当您使用它对特殊字符进行编码的方法时(应该如此)。您有两个选择:

  1. 在服务器端解码 url 编码的字符串。您没有提到您使用的是什么技术,但它们可能是可以为您完成此操作的功能。例如,对于 PHP,您可以使用 htmlspecialchars_decode("YOUR ENCODED STRING"); 但所有服务器端语言都会有类似的东西(最佳选择)

  2. 您可以手动构建发送到服务器端的字符串,而不是使用 .serialize()。您可以将 $("#newdata").serialize() 替换为键值对的对象文字:

{"InputId1": $("#InputId1").val(), "InputId2": $("#InputId2").val()}

编辑

刚刚看到您的文件的扩展名是 ASP,所以您使用的是经典的 asp。我不确定要解码的语法是什么,但我确信它很容易找到。

关于javascript - 使用 ajax 提交表单会导致 Charset 出现奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11422967/

相关文章:

php - 在 AJAX 调用中读取 POST 数据

javascript - 如何获得源映射以与 Chrome 开发工具和 webpack 一起使用?

javascript - 如何根据圆圈大小调整箭头?

jquery - jQuery 模式对话框中的 jqGrid 隐藏错误消息

java spring boot HTTP POST 请求不起作用

javascript - 如何从ajax调用函数返回值

javascript - Squareup.com 的自定义 Woocommerce 支付网关

javascript - 视差算法不适用于固定元素

javascript - 如何发送带有对象数组(包括 FormData 中的文件)的嵌套对象?

ajax - 如何从 firefox 浏览器扩展发出 AJAX 请求?