Вход

Просмотр полной версии : Ajax не работает в Chrome


DNA77
27.02.2013, 21:40
Всем доброго дня!
Столкнулся с проблемой создания объекта 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

DNA77
27.02.2013, 22:37
Запрос синхронный, но в 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)
....
посмотрите ответ приходит или нет
по моему у Вас неправильная последовательность вызовов

DNA77
27.02.2013, 22:56
Поставил вначале функции при значении 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.

DNA77
03.03.2013, 22:38
Нашел функцию, все работает, запрос отображается. Подскажите, как вытащить и вставить в другую функцию текст запроса. Хочу, чтобы через переменную он при помощи 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, вы наверно араб, раз пишите справа налево )))

DNA77
04.03.2013, 09:02
:lol: вское видал, но такое - впервые ))
DNA77, вы наверно араб, раз пишите справа налево )))

Danik, рад, что тебя это развеселило. Так как мне текст запроса использовать в другой функции?

danik.js
04.03.2013, 09:15
Так как мне текст запроса использовать в другой функции
Ну так наверное переписать слева направо?

DNA77
04.03.2013, 16:33
Это поправлю. Подскажите, как лучше реализовать, чтобы в функцию 1 (function DataAdd()), передавались данные из функции 3 (function Get(url)), которую вызывает функция 2 (function alertContents), в свою очередь функцию 2 вызвает функция 1. Как-то так :yes:

RazZzeR
13.03.2013, 01:26
Увидел тему в списке "Ajax не работает в Chrome", не мог этого пропустить :lol: