function ajax() {
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
req.open("POST", urlString, true);
req.setRequestHeader("Method", "POST " + urlString + " HTTP/1.1");
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=windows-1251");
req.onreadystatechange = processReqChange;
req.send(StringSending);
} else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
if (req) {
req.open("POST", urlString, true);
req.setRequestHeader("Method", "POST " + urlString + " HTTP/1.1");
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=windows-1251");
req.onreadystatechange = processReqChange;
req.send(StringSending);
}
}
}
function processReqChange() {
ab = window.setTimeout("req.abort();", 5000);
if (req.readyState == 4) {
clearTimeout(ab);
if (req.status == 200) {
showloadming(false);
if (createobject!=''){
div_result.innerHTML=req.responseText;
result=req.responseText;
}
showloadming(false);
} else {
alert("It was not possible to obtain the data:\n" + req.statusText);
}
}
}
Проблемы кодировкой
function utf8decode($str, $encode="windows-1251"){
return iconv("UTF-8", $encode, $str);
}
function utf8code($str,$encode="UTF-8"){
return iconv("windows-1251", $encode, $str);
}
И к этому парадокс чтобы ajax вернул нормальный текст то надо использовать utf8code.
Ну все бы и хорошо только что-то такой метод не на всех серверах работает вот например на localhost где Windows-xp pro. + Apache2 + MySql4-nt + php5.2 все пучком, а на сервере где Linux Debain Apache2 + MySql4- Debain + php5.2 такой метод не работает всеравно в ответ получаю UTF8. Подскажите как правильно проектировать сайт чтобы небело таких неурядиц .
Заранее спасибо.
у меня ни на локале ни на серве в инете не было такой проблемы... стоит тока кодировка самого сайта через header, а через iconv() перекодировать приходится только то что приходит из клиентской части... ответ посылаю в win1251 и приходит клиенту тоже в win
Перед ответом асинхронного вызова отправляй header() с нужной кодировкой. Т.е. если ответ у тебя cp1251, то и отправляй header("location:cp1251"), а после этого заголовка - ответ. При принудительной установке кодировки ответу она будет приходить в ней.
Может проблема в самом ajax файле там где создается XMLHttpRequest гляньте кто разбирается
Код:
Тут дело не в Ява Скрипте. У тебя есть РНР файл (функция), который отдаёт контент для аякса.
Код:
<?php
echo 'Это просто глупый некчёмный текст';
echo 'Это просто глупый некчёмный текст';
Теперь его немного модернизируй и получится
Код:
<?php
header(....);
echo 'Это просто глупый некчёмный текст';
header(....);
echo 'Это просто глупый некчёмный текст';
Так понятней?
Код:
function View(){
echo "<table><tr><td>блаблабла</td><td><img src=’delete.gif’ onclick=’ajax()’></td></tr></table>"
}
потом функция которую вызывает нажатие кнопки удалить
function Delete(){
//Удаление с БД
//вызов функции function View()
View();
которая выведет все записи без той что мы удалили и выведет в div который мы указали в JS функции ajax
}
echo "<table><tr><td>блаблабла</td><td><img src=’delete.gif’ onclick=’ajax()’></td></tr></table>"
}
потом функция которую вызывает нажатие кнопки удалить
function Delete(){
//Удаление с БД
//вызов функции function View()
View();
которая выведет все записи без той что мы удалили и выведет в div который мы указали в JS функции ajax
}
И вот судя с этого нам header("charset: cp1251"); или header("charset: windows-1251"); подставить в функцию Delete() но не какого результата нету
Ниже привожу картинку где верхний рисунок это ответ ajax в опере а нижний что долино бать.
sorry тупонул )) header("Content-type: text/html; charset=windows-1251"); вот так правельно начебто заработало ) если что еще отпешусь ))
Код:
this.send_ajax = function (id, element){
this.create_ajax();
if(this.failed && this.AjaxFailedAlert){
alert(this.ajax_alert);
} else {
if (this.xmlhttp){
ShowLoading();
var self = this;
if (this.method == "GET") {
var totalurlstring = (this.URLString) ? this.request_file + "?" + this.URLString + "&" + "ajax=true" : this.request_file + "?" + "ajax=true";
this.xmlhttp.open(this.method, totalurlstring, true);
} else {
this.request_file = (this.URLString!="") ? this.request_file + "&" + this.URLString : this.request_file;
this.xmlhttp.open(this.method, this.updateURL(this.request_file), true);
}
if (this.method == "POST"){
try {
this.xmlhttp.setRequestHeader("Method", "POST " + updateURL(this.request_file) + " HTTP/1.1");
this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=windows-1251");
} catch (e) {}
}
this.xmlhttp.send(this.StringSending);
this.xmlhttp.onreadystatechange = function() {
switch (self.xmlhttp.readyState){
case 1: self.onLoading(); break;
case 2: self.onLoaded(); break;
case 3: self.onInteractive(); break;
case 4: self.response = self.xmlhttp.responseText;
self.responseXML = self.xmlhttp.responseXML;
self.ReqStatus = self.xmlhttp.status;
self.result_string = self.xmlhttp.responseText;
HideLoading();
switch (element){
case "test": document.getElementById(id).value=self.result_string;
default: document.getElementById(id).innerHTML=self.result_string;
}
self.onHide();
self.onCompletion();
self.URLString = "";
HideLoading();
break;
}
};
}
}
};
this.create_ajax();
if(this.failed && this.AjaxFailedAlert){
alert(this.ajax_alert);
} else {
if (this.xmlhttp){
ShowLoading();
var self = this;
if (this.method == "GET") {
var totalurlstring = (this.URLString) ? this.request_file + "?" + this.URLString + "&" + "ajax=true" : this.request_file + "?" + "ajax=true";
this.xmlhttp.open(this.method, totalurlstring, true);
} else {
this.request_file = (this.URLString!="") ? this.request_file + "&" + this.URLString : this.request_file;
this.xmlhttp.open(this.method, this.updateURL(this.request_file), true);
}
if (this.method == "POST"){
try {
this.xmlhttp.setRequestHeader("Method", "POST " + updateURL(this.request_file) + " HTTP/1.1");
this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=windows-1251");
} catch (e) {}
}
this.xmlhttp.send(this.StringSending);
this.xmlhttp.onreadystatechange = function() {
switch (self.xmlhttp.readyState){
case 1: self.onLoading(); break;
case 2: self.onLoaded(); break;
case 3: self.onInteractive(); break;
case 4: self.response = self.xmlhttp.responseText;
self.responseXML = self.xmlhttp.responseXML;
self.ReqStatus = self.xmlhttp.status;
self.result_string = self.xmlhttp.responseText;
HideLoading();
switch (element){
case "test": document.getElementById(id).value=self.result_string;
default: document.getElementById(id).innerHTML=self.result_string;
}
self.onHide();
self.onCompletion();
self.URLString = "";
HideLoading();
break;
}
};
}
}
};
почему-то send не хочет отправлять точнее сервер не видет POST переменных которые передаю хотя в предыдущей версии функций роботы с ajax все работало вот не пойму разницы
где-то в феврале я задавал здесь уже такой вопрос. на локале выкрутился перекодировкой строк, а на глобальном сервере всё работало без трюков. попробуй, может у тебя тоже будет нормально всё на хостинге.