Просмотр полной версии : Ajax не работает в Chrome
Всем доброго дня!
Столкнулся с проблемой создания объекта XMLHttpRequest для Chrome, Opera.
Сайт www.aquasilver.ru
Функция запускается при оформлении заказа, если выбран какой либо товар.
function Get(url)
{
if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
if (req) {
req.onreadystatechange = responseServer;
req.open("GET", url, false);
req.send(null);
}
else if (typeof XMLHttpRequest!='undefined') {
req = new XMLHttpRequest();
req.onreadystatechange = responseServer;
req.open("GET", url, false);
req.send(null);
}
}}
Выдает ошибку, что и логично при обращении к свойству отсутствующего объекта. Не могу понять в чем проблема.
function WrToDoc()
{
var str=req.responseText;
Uncaught TypeError: Cannot read property 'responseText' of undefined
return str;
}
vadim5june
27.02.2013, 21:56
У Вас синхронный запрос что ли?
req.open("GET", url, false);
если асинхронный то последний параметр true
если синхронный то вроде бы без callback делается
-----------
названия функций не совпадают там responseServer
а сама функция WrToDoc
Запрос синхронный, но в IE он работает... при изменение req.open("GET", url, false); на "true" и в IE перестает работать.
Сама функция responseServer() выглядит следующим образом:
function responseServer() {
if (req.readyState == 4) {
var status = req.status;
//alert('status-'+status);
if (status == 200) {
addSelect(y);
} else if (status == 400) {
alert('Query error');
} else if (status == 500) {
alert('2Внутреняя ошибка на сервере');
} else if (status == 503) {
var time = req.getResponseHeader('Retry-After')*1000;
alert('Сервер перегружен. Запрос будет повторен через: '+time+' секунд');
setTimeout(sendRequest(url,path),time);
} else {
alert('Server response error');
};
};
};
Функция WrToDoc() вызывается функцией:
function DataAdd()
{
var url;
url="scripts/magazz.php?id="+document.getElementById('idLine').value;
Get(url);
st=WrToDoc();
//alert(st);
document.all.ShwOrd.innerHTML=st;
alert("end DataAdd");
}
vadim5june
27.02.2013, 22:46
Вы попробуйте в responseServer вставьте
if (status == 200) {alert(req.responseText)
....
посмотрите ответ приходит или нет
по моему у Вас неправильная последовательность вызовов
Поставил вначале функции при значении true не работает вообще, при значении false работает на IE, но alert не всплывает.
vadim5june
27.02.2013, 23:05
alert(req.responseText)
поставьте на 20 строку-функции Get(url)
danik.js
27.02.2013, 23:25
document.all.ShwOrd
Это не будет работать в Firefox.
Нашел функцию, все работает, запрос отображается. Подскажите, как вытащить и вставить в другую функцию текст запроса. Хочу, чтобы через переменную он при помощи innerHTML отображался в <td id='ShwOrd'>
document.getElementById('ShwOrd').innerHTML=st;
function Get(url) {
var httpRequest;
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
httpRequest = new XMLHttpRequest();
if (httpRequest.overrideMimeType) {
httpRequest.overrideMimeType('text/xml');
// See note below about this line
}
}
else if (window.ActiveXObject) { // IE
try {
httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {}
}
}
if (!httpRequest) {
alert('Giving up :( Cannot create an XMLHTTP instance');
return false;
}
httpRequest.onreadystatechange = function() { alertContents(httpRequest); };
httpRequest.open('GET', url, true);
httpRequest.send('');
}
function alertContents(httpRequest) {
if (httpRequest.readyState == 4) {
if (httpRequest.status == 200) {
var st=httpRequest.responseText;
alert ('st='+st);
st=document.getElementById('ShwOrd').innerHTML;
} else {
alert('There was a problem with the request.');
}
}
}
danik.js
04.03.2013, 02:17
st=document.getElementById('ShwOrd').innerHTML;
:lol: вское видал, но такое - впервые ))
DNA77, вы наверно араб, раз пишите справа налево )))
:lol: вское видал, но такое - впервые ))
DNA77, вы наверно араб, раз пишите справа налево )))
Danik, рад, что тебя это развеселило. Так как мне текст запроса использовать в другой функции?
danik.js
04.03.2013, 09:15
Так как мне текст запроса использовать в другой функции
Ну так наверное переписать слева направо?
Это поправлю. Подскажите, как лучше реализовать, чтобы в функцию 1 (function DataAdd()), передавались данные из функции 3 (function Get(url)), которую вызывает функция 2 (function alertContents), в свою очередь функцию 2 вызвает функция 1. Как-то так :yes:
Увидел тему в списке "Ajax не работает в Chrome", не мог этого пропустить :lol:
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot