Добрый день. Вчера читал документацию по XMLHttpRequest. Нацарапал небольшой код. Не могу получить от сервера нормальную JSON строку и вывести её на страницу. В 43 и 44 строках кода, надо явно что-то переписать.
Скрипт JS:
var MyRequest = function(options) {
options = {
type: options.type.toUpperCase() || 'POST',
url: options.url || '',
dataType: options.dataType.toUpperCase() || 'HTML',
param: options.param || '',
success: options.success || function(){},
error: options.error || function(){}
}
var xhr;
var rand = Math.floor(Math.random( )*(9999999+1));
if (window.XMLHttpRequest) {
try { xhr = new XMLHttpRequest(); }
catch (e){}
} else if (window.ActiveXObject) {
try { xhr = new ActiveXObject("Msxml2.XMLHTTP.6.0"); }
catch(e) {}
try { xhr = new ActiveXObject("Msxml2.XMLHTTP.3.0"); }
catch(e) {}
try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); }
catch(e) {}
try { xhr = new ActiveXObject("Microsoft.XMLHTTP"); }
catch(e) {}
}
xhr.open(options.type, options.url, true);
if(options.dataType == 'HTML') {
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=utf-8');
} else if(options.dataType == 'JSON') {
xhr.setRequestHeader('Content-Type', 'application/json;charset=utf-8');
}
xhr.send(encodeURIComponent(options.param));
xhr.onreadystatechange = function() {
if(xhr.readyState == 4) {
if(xhr.status == 200) {
if(options.dataType == 'HTML') {
return options.success(xhr.responseText);
} else if(options.dataType == 'JSON') {
// ЗДЕСЬ НАДО ЧТО-ТО ИСПРАВЛЯТЬ
// ЗДЕСЬ НАДО ЧТО-ТО ИСПРАВЛЯТЬ
// ЗДЕСЬ НАДО ЧТО-ТО ИСПРАВЛЯТЬ
// alert(data) выдаёт 1234
// alert(data.result) выдаёт undefined
eval('var data = ('+xhr.responseText+')');
return options.success(data);
}
} else {
return options.error(xhr.statusText);
}
}
}
}
function get_data() {
MyRequest({
type: 'GET',
dataType: 'JSON',
url: '/my_result.php',
success: function(data) {
alert(data.result); // выдаёт undefined
}, error: function(data) {
alert("ERROR");
}
});
}
Файл
my_result.php:
<?php
// так как тестирую именно json, то сразу делаю так:
echo json_encode(array('result'=>'1234'));
?>