| Автор
| Сообщение |
 Caesar
Новичок

Возраст: 23
Знак зодиака: 
Зарегистрирован: 11.07.2008
Сообщения: 8
Откуда: г.Саранск
|
|
|
Цитата |
|
Уважаемые гуру, я вот изучаю технологию AJAX. Исполняю следующий код, когда ввожу английские символы, все ок, но стоит ввести русские, как возникает в файерфоксе это:
Что мне делать?
файл index.html
| HTML: | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <title>AJAX with PHP: Quickstart </title> <script type="text/javascript" src="quickstart.js"></script> </head> <body onload='process()'> Server wants to know your name: <input type="text" id="myName" /> </body> </html>
|
файл quickstart.js
| Javascript: | // stores the reference to the XMLHttpRequest object var xmlHttp = createXmlHttpRequestObject(); // retrieves the XMLHttpRequest object function createXmlHttpRequestObject() { // will store the reference to the XMLHttpRequest object var xmlHttp; // if running Internet Explorer if(window.ActiveXObject) { try { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { xmlHttp = false; } } // if running Mozilla or other browsers else { try { xmlHttp = new XMLHttpRequest(); } catch (e) { xmlHttp = false; } } // return the created object or display an error message if (!xmlHttp) alert("Error creating the XMLHttpRequest object."); else return xmlHttp; } // make asynchronous HTTP request using the XMLHttpRequest object function process() { // proceed only if the xmlHttp object isn't busy if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0) { // retrieve the name typed by the user on the form name = encodeURIComponent(document.getElementById("myName").value); // execute the quickstart.php page from the server xmlHttp.open("GET", "quickstart.php?name=" + name, true); // define the method to handle server responses xmlHttp.onreadystatechange = handleServerResponse; // make the server request xmlHttp.send(null); } else // if the connection is busy, try again after one second setTimeout('process()', 1000); } // executed automatically when a message is received from the server function handleServerResponse() { // move forward only if the transaction has completed if (xmlHttp.readyState == 4) { // status of 200 indicates the transaction completed successfully if (xmlHttp.status == 200) { // extract the XML retrieved from the server xmlResponse = xmlHttp.responseXML; // obtain the document element (the root element) of the XML structure xmlDocumentElement = xmlResponse.documentElement; // get the text message, which is in the first child of // the the document element helloMessage = xmlDocumentElement.firstChild.data; // update the client display using the data received from the server document.getElementById("divMessage").innerHTML = '<i>' + helloMessage + '</i>'; // restart sequence setTimeout('process()', 1000); } // a HTTP status different than 200 signals an error else { alert("There was a problem accessing the server: " + xmlHttp.statusText); } } }
|
файл quickstart.php
| php: | <?php // we'll generate XML output header('Content-Type: text/xml'); // generate XML header echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'; // create the <response> element // retrieve the user name $name = $_GET['name']; // generate output depending on the user name received from client $userNames = array('CRISTIAN', 'BOGDAN', 'FILIP', 'MIHAI', 'YODA'); else if (trim($name) == '') echo 'Stranger, please tell me your name!'; else // close the <response> element ?>
|
_________________ Лучше быть первым в деревне - чем вторым в Риме! |
|
| В начало |
|
 |
|
|
 |
 orlov_ds
Модератор

Возраст: 31
Знак зодиака: 
Зарегистрирован: 14.04.2004
Сообщения: 1723
Откуда: Новосибирск
|
|
|
Цитата |
|
При использовании AJAX, могут возникнуть проблемы с передачей русских букв между скриптами независимо от метода (GET или POST). Решением является:
1. явное указание кодировки
На клиентской части это
| HTML: | <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
|
, на серверной (php) -
| HTML: | header("Content-type: text/html; charset=windows-1251");
|
2. ручная перекодировка
при отправке из javascript применять функцию encodeURIComponent, которая кодирует в Unicode
| php: | req.send('param='+encodeURIComponent('привет мир'));
|
в серверной части приводим к нужной кодировке с помощью iconv
| php: | iconv("UTF-8", "WINDOWS-1251", $param);
|
_________________ Хорошо излагает, зараза! Учитесь, Киса! |
|
| В начало |
|
 |
 Caesar
Новичок

Возраст: 23
Знак зодиака: 
Зарегистрирован: 11.07.2008
Сообщения: 8
Откуда: г.Саранск
|
|
|
Цитата |
|
Я это все делал и поиском пользоваться умею. Но проблема в том, что я все это сделал, ошибка перестала появляться, но стали появляться кракозябрики.
Самое интересное, что вот эта строчка в коде присутствует, но не работает!
| Javascript: | name = encodeURIComponent(document.getElementById("myName").value);
|
_________________ Лучше быть первым в деревне - чем вторым в Риме! |
|
| В начало |
|
 |
|