utf8/iso-8859-1 encoding i $.ajax()



如何在ajax请求中对utf8进行编码/解码?

我的页面是用iso-8859-1编码的,但如何在发送时轻松地将数据编码到utf8,并在恢复响应时再次解码?

function Ajax(){
    var _this = this;
    this.url = null;
    this.data = null;
    this.success = null;
    this.global = true;
    this.timeout = JSON_TIMEOUT;
    this.cache = false;
    this.dataType = 'json';
    this.type = 'post';
    this.send = function(){
        var jqxhr = $.ajax({
                url : this.url,
                data : this.data,
                timeout : this.timeout,
                cache : this.cache,
                dataType : this.dataType,
                type : this.type,
                global : this.global
                }
            )
            .success(this.success)
            .error(function(){
                // something
            })
            .complete(function(){
            });
    };
}

您不需要做任何事情。jQuery的ajax()函数将始终以UTF-8传输数据。

页面的编码格式并不重要,因为Javascript总是在内部使用Unicode,并正确翻译iso-8859-1页面。

我认为您需要使用这样的格式:

$.ajax({
  type: "POST",
  url: "WebMethodName",
  data: {'fname':'dave', 'lname':'ward'},
  contentType: "application/json; charset=utf-8",
  dataType: "json"
});

我分两步解决了这个问题。。。首先,在我包含在每个页面上的一个名为"PHP_function.PHP"的PHP函数文件中,我添加了以下片段:

"php_function.php":

<?php
/*-----------------------------------------------------------------------------
Codification($string)
$string = String to be consulted
Returns which encoding used in string
-----------------------------------------------------------------------------*/
function Codification($string) {
  return mb_detect_encoding($string.'x', 'UTF-8, ISO-8859-1');
}
/*-----------------------------------------------------------------------------
Updates all parameters sent from any page.
-----------------------------------------------------------------------------*/
foreach($_GET as $key => $value)
  $_GET[$key] = (Codification($value)=='UTF-8') ? utf8_decode($value):$value;
foreach($_POST as $key => $value)
  $_POST[$key] = (Codification($value)=='UTF-8') ? utf8_decode($value):$value;
/*-----------------------------------------------------------------------------
GetPost($string)
$ string = name of the variable used
Receives the name of the variable and tries to get by Post and / or GET
Returns the value of the variable ...
-----------------------------------------------------------------------------*/
function GetPost($GetPost) {
  $Ret = $_GET[$GetPost];
  if(trim($Ret) == '')
    $Ret = $_POST[$GetPost];
  return $Ret;
}
?>

其次,我在请求的页面中调用"php_function.php":

"requested_page.php":

<?php
require_once('php_function.php');
//... Get vars here
$var1 = GetPost('var1');
echo $var1;
//... Other implementations
?>

发件人页面类似于:

"index.php":

<html>
<head>
  <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
</head>
<body>
  <form name="form1" method="post" type="multipart/form-data">
    <input type="text" name="var1">
    <input type="submit" name="Send" id="Send" value="Send">
  </form>
  <script>
    $(function(){
      Ajax = function(params) {
        $.ajax({
          url: 'requested_page.php', dataType: 'html', type: 'POST',
           data: params, async: false,
          error: function(e) { alert("Error: "+e.responseText); },
          success: function(data) { alert(data); },
          complete: function() {}
        });
      }
      $("form").on("submit", function(e) {
        e.preventDefault();
        var params = $(this).serialize();
        Ajax(params);
      });
    });
  </script>
</body>
</html>

通过使用ajax发送类似于"aáéêeoóu"的文本,而不使用编目功能打印"aá!!!

最新更新