ebalazhabagadyuku, всё равно остались недочеты.
ЗЫ - всегда ставь фигурные скобки там, где они должны быть. Есть понятие как дизайн кода, который улучшает читабельность. Лучше соблюдать эти стандарты, если хочешь развиваться и возможно в будущем работать в команде.
это называется табуляция кода, я знаю)) тут пробелы не показывают))
Чувствуешь разницу между "фигурные скобки" и "табуляция кода"?
if (someVar == true) someVar2 = false; // НЕ ПРАВИЛЬНО!
Правильно будет так:
if (someVar == true) {
someVar2 = false;
}
Ну и естественно про табуляцию не забываем
ты сейчас помоему запорол код))
Чем же интересно? Тем, что сделал его более удобным и простым для чтения и понимания?
это всеравно что написать в пхп вот так if ($a = $b) { $c = true; } else { $c = false; }
Речь идёт не о конкретном примере моего кода, а о принципе. Синтаксис языка позволяет пропустить фигурные скобки, если за условием следует лишь одно действие. Но так делать не рекомендуется! За условием должны следовать фигурные скобки, а действие(-я) со следующей строки. После действия закрывающая фигурная скобка.
Это считается хорошим тоном в дизайне кода. И не зря! Действительно удобно читать и легко понять.
[code]
/*
* ajax
*
*/
// set ajax dir
var dir = 'ajax';
function ajax(obj) {
if (obj.element) var element = document.getElementById(obj.element);
// check if supported ActiveX scripts
if (window.XMLHttpRequest) {
// make new object
var XHR = new XMLHttpRequest();
// request handler
XHR.onreadystatechange = function () {
// request state
if (XHR.readyState == 4) {
// success
if (XHR.status == 200) {
if (obj.element) element.innerHTML = XHR.responseText;
// callback
obj.success();
}
// fail
else if (XHR.status == 400) {
if(obj.element) element.innerHTML = 'Ошибка.';
// callback
obj.fail();
}
}
}
// make ht adress
var ht = 'http://' + window.location.hostname + '/' + dir + '/' + obj.action;
// POST
if (obj.method == 'POST') {
// make url string
XHR.open(obj.method, ht, obj.async);
// set header
XHR.setRequestHeader("content-type", "application/x-www-form-urlencoded"
// sending..
XHR.send(obj.v);
}
// GET
else {
// make url string
XHR.open(obj.method, ht + '?' + obj.v, obj.async);
// sending..
XHR.send(null);
}
}
else {
if (obj.element) element.innerHTML = 'Ошибка. Включите поддержку ActiveX.';
// callback
obj.fail();
}
};
[/code]
Добавлено 06.08.14 в 22:21:58:
Пример использования у меня в движке: [code] $output .= '<a href="#" onclick="ajax({
\'action\' : \'example.php\',
\'method\' : \'POST\',
\'async\' : true,
\'v\' : \'val1=&val2=&va3=\',
\'success\': function () {alert(\'success\');},
\'fail\' : function () {alert(\'fail\');}
});">test ajax</a>';
[/code]
Работает на ура.
Добавлено 07.08.14 в 05:01:31:
а если так?
[code]
/*
* ajax
*
*/
// set ajax dir
var dir = 'ajax';
// all activex versions
var ActiveXObjectVersions = new Array('MSXML2.XMLHHTP.6.0',
'MSXML2.XMLHHTP.5.0',
'MSXML2.XMLHHTP.4.0",
'MSXML2.XMLHHTP.3.0',
'MSXML2.XMLHHTP',
'Microsoft.XMLHHTP');
//
var xmlhttp;
function ajax(obj) {
if (obj.element) var element = document.getElementById(obj.element);
var i = 0;
for (i = 0; i < XMLHttpVersions.length; i++) {
if(typeof ActiveXObject(ActiveXObjectVersions[i]) != 'undefined') {
//
xmlhttp = new ActiveXObject(XMLHttpVersions[i]);
}
}
if (!xmlhttp) {
//
xmlhttp = new XMLHttpRequest();
}
// request handler
xmlhttp.onreadystatechange = function () {
// request state
if (xmlhttp.readyState == 4) {
// success
if (xmlhttp.status == 200) {
// response
if (obj.element) element.innerHTML = XHR.responseText;
// callback
obj.success();
}
// fail
else if (xmlhttp.status == 400) {
// response
if(obj.element) element.innerHTML = 'Ошибка.';
// callback
obj.fail();
}
}
}
// make ht adress
var http = 'http://' + window.location.hostname + '/' + dir + '/' + obj.action;
// POST
if (obj.method == 'POST') {
// make url string
xmlhttp.open(obj.method, http, obj.async);
// set header
xmlhttp.setRequestHeader("content-type", "application/x-www-form-urlencoded"
// sending..
xmlhttp.send(obj.v);
}
// GET
else {
// make url string
xmthttp.open(obj.method, http + '?' + obj.v, obj.async);
// sending..
xmlhttp.send(null);
}
};
[/code]
Добавлено 07.08.14 в 06:50:59:
более поработанная версия
[code]
/*
* ajax
*
*/
// set ajax dir
var dir = 'ajax';
// all activex versions
var ActiveXObjectVersions = ['MSXML2.XMLHHTP.6.0',
'MSXML2.XMLHHTP.5.0',
'MSXML2.XMLHHTP.4.0",
'MSXML2.XMLHHTP.3.0',
'MSXML2.XMLHHTP',
'Microsoft.XMLHHTP'];
//
var req;
function ajax(obj) {
if (obj.element) var element = document.getElementById(obj.element);
var i = 0;
for (i = 0; i < XMLHttpVersions.length; i++) {
// find compare activex version
if(typeof ActiveXObject(ActiveXObjectVersions[i]) != 'undefined') {
//
req = new ActiveXObject(XMLHttpVersions[i]);
}
}
if (!req) {
//
req = new XMLHttpRequest();
}
// request handler
req.onreadystatechange = function () {
// request state
if (req.readyState == 4) {
// success
if (req.status == 200) {
// response
if (obj.element) element.innerHTML = XHR.responseText;
// callback
obj.success();
}
// fail
else {
// response
if(obj.element) element.innerHTML = 'Ошибка.';
// callback
obj.fail();
}
}
else {
}
}
else {
}
// add headers
var i = 0;
for (i = 0; i < obj.headers; i++) {
req.setRequestHeader(obj.headers[i]['name'], obj.headers[i]['value']);
}
// make ht adress
var http = 'http://' + window.location.hostname + '/' + dir + '/' + obj.action;
//
if (obj.v) {
//
var v, i;
for (i = 0; i < obj.v.length; i++) {
//
if (i ==0) {
//
v += obj.v[i]['name'] + '=' + obj.v[i]['value'];
}
else {
//
v += '&' + obj.v[i]['name'] + '=' + obj.v[i]['value'];
}
}
}
// POST
if (obj.method == 'POST') {
// make url string
req.open(obj.method, http, obj.async);
// auto set header
// xmlhttp.setRequestHeader("content-type", "application/x-www-form-urlencoded"
// sending..
req.send(v);
}
// GET
else {
// make url string
req.open(obj.method, http + '?' + v, obj.async);
// sending..
req.send(null);
}
};
[/code]