|
|
|
| Собственно, ситуация следующая.
С помощью 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
(02.11.2009 в 15:13)
| | Идей нету? | |
|
|
|
|
|
|
|
для: EvgenLog
(03.11.2009 в 12:55)
| |
var oXmlHttp = createXMLHttp();
|
Как создаете объект? | |
|
|
|
|
|
|
|
для: 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;
}
|
так вроде как правильнее получается. | |
|
|
|
|
|
|
|
для: EvgenLog
(03.11.2009 в 15:35)
| | . | |
|
|
|
|
|
|
|
для: 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="Главная страница">
Главная страница
</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. | |
|
|
|
|
|
|
|
для: EvgenLog
(03.11.2009 в 18:30)
| | Пропишите:
function saveResult(sText)
{
alert ('|' + sText + '|');
...
| и посмотрите, что сервер вам возвращает в MSIE, и что - в других браузерах. | |
|
|
|
|
|
|
|
для: АЯ
(03.11.2009 в 21:28)
| | В FF возвращает код страницы, сформированный php.
Google Chrome работает также как FF...
IE возвращает шаблон, без данных. Т.е. по видимому данные из формы не отправляются скрипту и тот просто не знает что показывать...кроме шаблона.
Опера вообще ничего не показывает. молчит. а если включить экранирование ошибок, то там пишет "message: Security violation".
Safari возвращает ошибку, мол там у него HTTP-статус нулевой. oXmlHttp.status = 0
Полный абзац короче. | |
|
|
|
|
|
|
|
для: EvgenLog
(03.11.2009 в 23:20)
| | Со всем разобрался. Кроме IE.
Данные из формы сформированной динамически по прежнему не отправляются.
Остальные проблемы возникали из-за отсутствия www. в строке URL.
Надеюсь на вашу помощь.. | |
|
|
|
|
|
|
|
для: EvgenLog
(04.11.2009 в 01:19)
| | MSIE довольно строго относится к отсутствию кавычек при определении значения атрибута, если в этом значении есть пробел.
Вашу конструкцию OnSubmit=sendRequest(this); return false> следует вывести закавыченной, вот так: OnSubmit='sendRequest(this); return false'>
Не совсем уверен, что именно это вам поможет, но в любом случае исправьте. | |
|
|
|
|
|
|
|
для: АЯ
(04.11.2009 в 07:41)
| | К сожалению нет... По прежнему данные не передаются. | |
|
|
|
|
|
|
|
для: EvgenLog
(04.11.2009 в 12:40)
| | Ещё предположения етсть у кого-нибудь?
Может заголовки там какие переслать или с хешированием у IE проблема или ещё какие-нибудь мелочи... | |
|
|
|