Ваш запрос показывает "сбой", потому что функция onreadystatechange
вызывается несколько раз с разными readyState
с. Вот улучшенная версия с лучшим отступом:
request.onreadystatechange = function(){
if (request.readyState == 4) {
if (request.status == 200) {
alert('http.responseText');
} else {
alert('fail'); // fails here
}
}
}
Вы должны проверять status
только тогда, когда readyState
достиг 4
.
Кроме того, при назначении параметров URL-адресу, вы должны использовать encodeURIComponent
для правильного кодирования параметров (например, при отправке &
в значении, которое анализатор думает, что оно отмечает начало нового пара ключ / значение). А при использовании POST
в качестве метода вы должны изменить все экземпляры %20
на +
в соответствии со спецификацией и отправлять ваши данные в качестве параметра в функцию send
и не объединять их с URL:
var url = "conn_sql.php";
…
request.send("options=" + encodeURIComponent(options).replace(/%20/g, '+'));
ОБНОВЛЕНИЕ: Чтобы обработать отправленную строку в PHP, используйте json_decode
, например ::
<?php
$json = $_POST['options'];
$options = json_decode($json);
// now $options contains a PHP object
?>
(также см. Как декодировать строку JSON )