Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.12.2010, 17:09
Интересующийся
Отправить личное сообщение для Hron Посмотреть профиль Найти все сообщения от Hron
 
Регистрация: 07.04.2010
Сообщений: 11

XML на сервер посредством js
Здравствуйте.
Вроде бы инфы по этой теме завались, но у меня, видимо, проблемы с её использованием.

Задача довольно проста. На сервере (я использую XAMPP, хотя это не важно, вобщем в localhost) лежит файлик giveMeXML.php, который пока ничего не делает, но потом, естественно будет заниматся обработкой XML. И есть скрипт:

function getXmlHttp(){ //создание запроса - стандартное
  var xmlhttp;
  try {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
    try {
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (E) {
      xmlhttp = false;
    }
  }
  if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
    xmlhttp = new XMLHttpRequest();
  }
  return xmlhttp;
}
function call(){ //по клику
  var xmlhttp = getXmlHttp();
  var xmlString = "<profile>" +
    "  <firstName>a</firstName>" +
    "  <lastName>b</lastName>" +
    "</profile>";
  //вот тут начинаются проблемы
  xmlhttp.open('POST', 'giveMeXML.php', true);
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4) {
       if(xmlhttp.status == 200) {
         alert(xmlhttp.responseText);
       }
    }
  };
xmlhttp.send(xmlString);
}

Как уже было отмечено в коде, я думаю, что прблема в URL части метода open.
Я не совсем понял, если там указывается имя скрипта, то вроде все правильно, а если нет, то где оно указывается? Кнопки достаточно или нужно ли создавать форму?
Так или иначе все заканчивается на этой строчке.
Заранее спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 22.12.2010, 17:17
Интересующийся
Отправить личное сообщение для Hron Посмотреть профиль Найти все сообщения от Hron
 
Регистрация: 07.04.2010
Сообщений: 11

Ой, ошибочка вышла.
На самом деле js работает вроде до конца.
Важно отметить, что в процессе дебага выяснено:
xmlhttp.status=0;
А, поидее нужно xmlhttp.status = 200.
Ну и php скрипт не запускается, почему-то. В ручную запускал его. Сервер пашет.

Последний раз редактировалось Hron, 22.12.2010 в 17:56.
Ответить с цитированием
  #3 (permalink)  
Старый 22.12.2010, 23:53
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

дай ссылку на тестовый пример
Ответить с цитированием
  #4 (permalink)  
Старый 23.12.2010, 12:26
Интересующийся
Отправить личное сообщение для Hron Посмотреть профиль Найти все сообщения от Hron
 
Регистрация: 07.04.2010
Сообщений: 11

Я вроде как писал, что использую виртуальный сервер.
Поэтому просто скину код html страцины, которая лежит рядом с php скриптом в папке, являющейся localhost. (по умолчанию htdocs в xampp)
Т.е. к js коду, по сути, добавлю интерфейс для того чтобы запустить call().
Не знаю, считается ли моветоном писать js в html, но мне важно только узнать почему не срабатывает php скрипт после нажатия на "Make a request"
Сам php пока для теста у меня просто пишет файл test.txt.

<html xmlns="http://www.w3.org/1999/xhtml">
<head> 
</head>
<body>
<script type="text/javascript" language="javascript">
function getXmlHttp(){
  var xmlhttp;
  try {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
    try {
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (E) {
      xmlhttp = false;
    }
  }
  if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
    xmlhttp = new XMLHttpRequest();
  }
  return xmlhttp;
}
function call(){
var xmlhttp = getXmlHttp();
var xmlString = "<profile>" +
    "  <firstName>a</firstName>" +
    "  <lastName>b</lastName>" +
    "</profile>";
	xmlhttp.open('POST', 'giveMeXML.php', true);
	xmlhttp.onreadystatechange = function() {
		if (xmlhttp.readyState == 4) {
			if(xmlhttp.status == 200) {
				alert(xmlhttp.responseText);
			}
		}
	};
	//xmlhttp.setRequestHeader("Content-Type", "text/xml");
	xmlhttp.send(xmlString);
}
</script>
<span style="cursor: pointer; text-decoration: underline" onclick="call()">">Make a request</span>
</body>
</html>
Ответить с цитированием
  #5 (permalink)  
Старый 24.12.2010, 00:00
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

в каком браузере не работает?

Сообщение от Hron
Сам php пока для теста у меня просто пишет файл test.txt.
исходный код
Ответить с цитированием
  #6 (permalink)  
Старый 24.12.2010, 23:15
Интересующийся
Отправить личное сообщение для Hron Посмотреть профиль Найти все сообщения от Hron
 
Регистрация: 07.04.2010
Сообщений: 11

<?php
$f= fopen("test.txt", "w");

fwrite($f,"test");
  fclose($f);
?>

Не думаю, что в этом коде есть ошибки)
Скорее всего что-то не так в js, или виртуальном сервере. Php пашет через любой браузер, а js не работает (хотя оно работает, просто что-то не так с запросом) в IE, FF, Chrome. Инструмент дебага - Firebug в FF.
Ответить с цитированием
  #7 (permalink)  
Старый 24.12.2010, 23:56
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

еще раз проверил. У меня твой скрипт работает. В access.log запрос попадает? На вкладке сеть firebug'а запрос появляется? Можешь еще fiddler'ом попробовать посмотреть
Ответить с цитированием
  #8 (permalink)  
Старый 25.12.2010, 02:03
Интересующийся
Отправить личное сообщение для Hron Посмотреть профиль Найти все сообщения от Hron
 
Регистрация: 07.04.2010
Сообщений: 11

Хм. Что же у меня не так тогда.. В логе такие строчки есть:

127.0.0.1 - - [25/Dec/2010:01:19:15 +0500] "GET /giveMeXML.php HTTP/1.1" 200 - "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 sputnik 2.3.0.96"

Не знаю откуда, может я когда-то и пробовал GET, но новые строчки почему-то не появляются. Вкладка сеть в firebug'е пустует.

Т.е. вы воспроизвели мои файлы на виртуальном сервере, проверили и все работает?

Последний раз редактировалось Hron, 25.12.2010 в 02:10.
Ответить с цитированием
  #9 (permalink)  
Старый 25.12.2010, 06:16
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

да. Попробуй поставить обработчик xmlhttp.onerror
Ответить с цитированием
  #10 (permalink)  
Старый 25.12.2010, 20:54
Интересующийся
Отправить личное сообщение для Hron Посмотреть профиль Найти все сообщения от Hron
 
Регистрация: 07.04.2010
Сообщений: 11

Так, моя ошибка была в том, что я открывал html не через localhost.
Теперь все работает. Спасибо.
Еще один вопрос:
Я так понимаю, в POST приходит строка, её нужно преобразовывать в xml. Поможет ли эта строчка в отправке xml?
xmlhttp.setRequestHeader("Content-Type", "text/xml");
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JS, RDFa, DOM, XML - Help! О_о Djumpen Общие вопросы Javascript 5 18.11.2010 19:37
Отпрака XML файла на сервер! Goga Events/DOM/Window 2 07.06.2010 12:57
Создание xml с помощью JS балерун Общие вопросы Javascript 4 20.04.2010 11:59
Передать несколько значений из JS на сервер, методом POST балерун Общие вопросы Javascript 1 02.03.2010 14:36
Что выбрать XML или JSON для передачи Ajax - ом из PHP в JS Gozar Общие вопросы Javascript 20 16.08.2009 23:36