2016-06-16 3 views
1

Я использую этот код AJAX для отправки данных на сервер:

$.ajax({ 
    data: postData, 
    type: method, 
    url: url, 
    timeout: 20000, 
    contentType: "application/x-www-form-urlencoded;charset=UTF-8", 
    error: function(jqXHR,textStatus,err){alert("Error returned from ajax call "+err);}, 
    success: function(data,status,jqXHR){ 
     // process response... 
    } 
}); 

postData является строка запроса со многими значениями, а method является GET или POST

Проблема заключается в том что при отправке строки запроса, содержащей Älypuhelimen lisävarusteet, результат в базе данных: �lypuhelimen lis�varusteet

Сопоставление соединения с базой данных utf-8, и это отлично работает, когда я не использую ajax для публикации и сохранения в базе данных ... Это определенно ajax, который испортил кодировку ...

Я также пробовал использовать функцию encodeURIComponent() на данные, и она становится %C4lypuhelimen%20lis%E4varusteet, если я использую его ... то же самое касается функции побега() ...

любая помощь будет оценена ...

+0

Извините, ребята! Проблема заключалась в том, что данные post сами ... postData анализировалась функцией, которая использовала escape() для url, чтобы избежать всех переменных запроса ... используя encodeURIComponent() вместо escape() исправил проблему ... –

ответ

0

Просто для информации и помочь другим, которые могли попасть в такой же ситуации ...

Проблема была с самого PostData ... это был разобран таким образом, что каждая переменная пост была применена с escape() ... Использование encodeURIComponent() вместо escape() сработало!

Резюме: функция Donot использование побег() для URL-побег компоненты запроса ... использовать encodeURIComponent() вместо ...

0

Попробуйте изменить столбец в базе данных для utf16_bin Collation

Сообщите вам код подключения к базе php.

+0

столбец в базе данных - это utf8, который аналогичен отправляемым данным ... также стоит отметить, что если вызывается без ajax ... тот же код js/form/php отлично сохраняет данные в базе данных ... поэтому это не проблема с сортировкой базы данных или сопоставление соединений ... –

+0

Убедитесь, что ваш php-файл находится в utf-8, а соединение с базой данных - с кодировкой utf-8. База данных сохранена правильно? –

+0

Да, я убедился, что php-файл отправляет заголовок и базу данных utf-8, а его сопоставление соединений - в utf-8 ... infact, как я уже говорил ... если я не использую ajax .. строка сохраняет совершенно правильную в базе данных и даже отлично показывает мою страницу вывода html php ...который подтверждает, что что-то запуталось во время вызова ajax ... –

1

Вы должны попробовать jQuery Base64 encode.

JavaScript:

<script src="jquery.min.js"></script> 
<script src="jquery.base64.min.js"></script> 
<script> 
    enctext = $.base64.encode("yourtext"); 
    //your ajax code goes here. 
</script> 

PHP:

<?php 
    $org_text = base64_decode($_POST['your_variable']); 
?> 

JQuery плагин Base64.

скачать отсюда.

https://github.com/carlo/jquery-base64

+0

Это означает, что мне нужно будет base64_encode все переменные POST в JS и base64_decode все из них в PHP ... что не совсем практично, потому что тот же PHP используется для ajax и нормально оба вызова ... Также base64_encode иногда искажает данные ... –

Смежные вопросы