Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вызов JavaScript - функции из страницы сгенерированной методом AJAX
 
 автор: EvgenLog   (02.11.2009 в 15:13)   письмо автору
 
 

Собственно, ситуация следующая.
С помощью AJAX отправляется запрос скрипту PHP - тот возвращает страницу, на которой дублируется вызов функции с помощью которой она была сформирована.

Часть кода: функция которая вызывается для генерации новой страницы

function sendRequest(form)
{
  var sLoad = document.getElementById("divStatus");
  sLoad.innerHTML = "<center>Запрос контента, пожалуйста подождите...</center>";

  var oForm = form;
  var sBody = getRequestBody(oForm);
  var oXmlHttp = createXMLHttp();

  oXmlHttp.open("POST",oForm.action, true);
  oXmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

  oXmlHttp.onreadystatechange = function()
  {
   if(oXmlHttp.readyState == 4)
   {
    if(oXmlHttp.status == 200)
    {
     saveResult(oXmlHttp.responseText);
    }
    else
    {
     saveResult("Ошибка: " + oXmlHttp.statusText);
    }
   }
  }
 oXmlHttp.send(sBody);
}


Вызывается так...

<form id="start_form" action="<?echo("".$main_url."/bla_bla.php");?>" method="post" OnClick="sendRequest(this); return false">
 <input name="key" type="hidden" value="1">
</form>


Генерируется что то вроде...

<form action=".$main_url."/bla_bla.php method=POST OnSubmit=sendRequest(this); return false>
 <input class=text name=f type=text maxlength=20 value=Фамилия>
 <input class=text name=i type=text maxlength=20 value=Имя>
 <input class=text name=o type=text maxlength=30 value=Отчество>
 <input class=button type=submit value=Send>
</form>


Что происходит в нормальных браузерах:
Отправляется Фамилия Имя и Отчество и показывается на следующей странице.

Что происходит в IE:
Пишет ошибку в сценариях.
А посредине сраницы висит надпись.... Запрос контента, пожалуйста подождите...

  Ответить  
 
 автор: EvgenLog   (03.11.2009 в 12:55)   письмо автору
 
   для: EvgenLog   (02.11.2009 в 15:13)
 

Идей нету?

  Ответить  
 
 автор: GeorgeIV   (03.11.2009 в 15:15)   письмо автору
 
   для: EvgenLog   (03.11.2009 в 12:55)
 

var oXmlHttp = createXMLHttp(); 

Как создаете объект?

  Ответить  
 
 автор: EvgenLog   (03.11.2009 в 15:35)   письмо автору
 
   для: GeorgeIV   (03.11.2009 в 15:15)
 

Сначала создавал так.

function createXMLHttp()
{
 if(typeof XMLHttpRequest != "undefined")
 {
  return new XMLHttpRequest();
 }
 else if(window.ActiveXObject)
 {
  var aVersions = ["MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0",
  "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp",
  "Microsoft.XMLHttp"
        ];
  for (var i = 0; i < aVersions.length; i++)
  {
   try
   { //
    var oXmlHttp = new ActiveXObject(aVersions[i]);
    return oXmlHttp;
    }
    catch (oError)
    {
   }
  }
   throw new Error("Невозможно создать объект XMLHttp.");
  }
 }


Теперь создаю так:

function initXMLHTTPRequest()
{
 var xRequest=null;
 if (window.XMLHttpRequest)
 {
  xRequest=new XMLHttpRequest();
 }
 else if (window.ActiveXObject)
 {
  xRequest=new ActiveXObject("Microsoft.XMLHTTP");
 }
 return xRequest;
}


так вроде как правильнее получается.

  Ответить  
 
 автор: GeorgeIV   (03.11.2009 в 17:00)   письмо автору
 
   для: EvgenLog   (03.11.2009 в 15:35)
 

.

  Ответить  
 
 автор: EvgenLog   (03.11.2009 в 18:30)   письмо автору
 
   для: GeorgeIV   (03.11.2009 в 17:00)
 

что значит .?
В общем, чтобы всё стало предельно ясно...

файл index.php

<?php
 
include ($_SERVER['DOCUMENT_ROOT']."/includes/functions.php");
 include (
$_SERVER['DOCUMENT_ROOT']."/includes/config/db_config.php");
 include (
$_SERVER['DOCUMENT_ROOT']."/includes/config/config_main.php");
 include (
$_SERVER['DOCUMENT_ROOT']."/includes/content.php");
?>


файл content.php

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
 <head>
  <title>.::Num-Decoding::.</title>
  <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
  <meta http-equiv="X-UA-Compatible" content="IE=8" />
  <link rel="stylesheet" type="text/css" href="<?echo("".$main_url."/styles/style.css");?>" />
  <script language="JavaScript" src="<?echo("".$main_url."/includes/js/script.js");?>" type="text/javascript"></script>
</head>
<body>
 <form action="<?echo("".$main_url."/test.php");?>" method="post" OnClick="sendRequest(this); return false">
  <input name="caption" type="hidden" value="Главная&nbsp;страница">
  Главная&nbsp;страница
 </form>
</body>
</html>


файл script.js

var READY_STATE_UNINITIALIZED=0;
var READY_STATE_LOADING=1;
var READY_STATE_LOADED=2;
var READY_STATE_INTERACTIVE=3;
var READY_STATE_COMPLETE=4;

// Инициализация объекта
function initXMLHTTPRequest()
{
 var xRequest=null;
 if(window.XMLHttpRequest)
 {
  xRequest=new XMLHttpRequest();
 }
 else if(window.ActiveXObject)
 {
  xRequest=new ActiveXObject("Microsoft.XMLHTTP");
 }
 return xRequest;
}

// Формирование строки запроса
function getRequestBody(oForm)
{
 var aParams = new Array();
 for(var i = 0; i < oForm.elements.length; i++)
 {
  var sParam = encodeURIComponent(oForm.elements[i].name);
  sParam += "=";
  sParam += encodeURIComponent(oForm.elements[i].value);
  aParams.push(sParam);
 }
 return aParams.join("&");
}

// Отправка запроса
function sendRequest(frmName)
{
 var sLoad = document.getElementById("divStatus");
 sLoad.innerHTML = "<center>Запрос контента, пожалуйста подождите...</center>";

 var oForm = frmName;
 var sBody = getRequestBody(oForm);
 var oXmlHttp = initXMLHTTPRequest();

 oXmlHttp.open("POST",oForm.action, true);
 oXmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

 oXmlHttp.onreadystatechange = function()
 {
  if(oXmlHttp.readyState == READY_STATE_COMPLETE)
  {
   if(oXmlHttp.status == 200)
   {
    saveResult(oXmlHttp.responseText);
   }
   else
   {
    saveResult("Ошибка: " + oXmlHttp.statusText);
   }
  }
 }
 oXmlHttp.send(sBody);
}

// Обновление контента
function saveResult(sText)
{
 var sElem = document.getElementById("divStatus");
 sElem.innerHTML = sText;
}


файл test.php

<?php
 
include ($_SERVER['DOCUMENT_ROOT']."/includes/config/db_config.php");
 include (
$_SERVER['DOCUMENT_ROOT']."/includes/functions.php");
 include (
$_SERVER['DOCUMENT_ROOT']."/includes/config/config_main.php");

 
$caption iconv("UTF-8""WINDOWS-1251"$_POST['caption']);
 
$flag $_POST['flag']);

 
$f iconv("UTF-8""WINDOWS-1251"htmlspecialchars($_POST['f']));
 
$i iconv("UTF-8""WINDOWS-1251"htmlspecialchars($_POST['i']));
 
$o iconv("UTF-8""WINDOWS-1251"htmlspecialchars($_POST['o']));

echo(
$caption);

if(isset(
$flag))
{
 
MyFunction();
}
else
{
 echo(
"
  <form class=input_form action="
.$main_url."/test.php OnSubmit=sendRequest(this); return false>
  <table align=center>
   <tr>
    <td>
     <input class=text name=f type=text maxlength=20 value=Фамилия>
     <input class=text name=i type=text maxlength=20 value=Имя>
     <input class=text name=o type=text maxlength=30 value=Отчество>
     <input name=flag type=hidden value=1>
    </td>
   </tr>
   <tr>
    <td align=right>
     <input class=button type=submit value=Отправить>
    </td>
   </tr>
  </table>
 </form>
 "
);
}


Собственно вот.. Надеюсь теперь всё ясно. В IE работать отказывается.
Сервер возвращает пустой div.

  Ответить  
 
 автор: АЯ   (03.11.2009 в 21:28)   письмо автору
 
   для: EvgenLog   (03.11.2009 в 18:30)
 

Пропишите:
function saveResult(sText)

alert ('|' + sText + '|');
...
и посмотрите, что сервер вам возвращает в MSIE, и что - в других браузерах.

  Ответить  
 
 автор: EvgenLog   (03.11.2009 в 23:20)   письмо автору
 
   для: АЯ   (03.11.2009 в 21:28)
 

В FF возвращает код страницы, сформированный php.
Google Chrome работает также как FF...

IE возвращает шаблон, без данных. Т.е. по видимому данные из формы не отправляются скрипту и тот просто не знает что показывать...кроме шаблона.

Опера вообще ничего не показывает. молчит. а если включить экранирование ошибок, то там пишет "message: Security violation".

Safari возвращает ошибку, мол там у него HTTP-статус нулевой. oXmlHttp.status = 0

Полный абзац короче.

  Ответить  
 
 автор: EvgenLog   (04.11.2009 в 01:19)   письмо автору
 
   для: EvgenLog   (03.11.2009 в 23:20)
 

Со всем разобрался. Кроме IE.
Данные из формы сформированной динамически по прежнему не отправляются.

Остальные проблемы возникали из-за отсутствия www. в строке URL.
Надеюсь на вашу помощь..

  Ответить  
 
 автор: АЯ   (04.11.2009 в 07:41)   письмо автору
 
   для: EvgenLog   (04.11.2009 в 01:19)
 

MSIE довольно строго относится к отсутствию кавычек при определении значения атрибута, если в этом значении есть пробел.
Вашу конструкцию OnSubmit=sendRequest(this); return false> следует вывести закавыченной, вот так: OnSubmit='sendRequest(this); return false'>

Не совсем уверен, что именно это вам поможет, но в любом случае исправьте.

  Ответить  
 
 автор: EvgenLog   (04.11.2009 в 12:40)   письмо автору
 
   для: АЯ   (04.11.2009 в 07:41)
 

К сожалению нет... По прежнему данные не передаются.

  Ответить  
 
 автор: EvgenLog   (05.11.2009 в 00:02)   письмо автору
 
   для: EvgenLog   (04.11.2009 в 12:40)
 

Ещё предположения етсть у кого-нибудь?
Может заголовки там какие переслать или с хешированием у IE проблема или ещё какие-нибудь мелочи...

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования