Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Оптимицация множественных &.ajax() (https://javascript.ru/forum/jquery/37004-optimicaciya-mnozhestvennykh-ajax.html)

zzzzzz 04.04.2013 00:40

Оптимицация множественных &.ajax()
 
function openNotepad()
{
	var npid = $(this).attr('id');
	$.ajax({
		 type: "POST",
		 data: "open=ok&npid=" + npid,
		 url: "/modules/notepad/module.php",
		 success: function(data)
		 {
		   $("body").append('<textarea class="notepad' + npid + ' notepadDialog"></textarea>');
		   $('.notepad' + npid).text(data).dialog({ dialogClass: npid, width: 650, height: 450, title: "БЛОКНОТ", closeText: "✖", resizable: true, 
		   close: function(event, ui) {$(this).dialog('destroy').remove()},
		   });
		 }
		});
}


function saveNotepad()
{
	var npid = $(this).attr('class');
	$.ajax({
		type: "POST",
		data: "saveAs=ok&name=" + name + "&text=" + text,
		url: "/modules/notepad/module.php",
		success: function(data)
		{
			$('#page').append(data);
			$('#page>div').last().fadeIn();
		}
	});
}


Всем привет. На сайте много таких функций. По сути в каждой меняется только data и success. Как правильно их объединить(или оптимизировать, не знаю как правильно сказать), чтобы не приходилось каждый раз писать все что не относится к data и success.

danik.js 04.04.2013 01:15

А я вижу что по сути не_меняется только type и url )))
причем если использовать $.post, то тайп указывать не придется. А url можно в переменную вывести. И это не оптимизация (от всех этих перестановок код быстрее работать не станет), это - рефакторинг.

Hoshinokoe 04.04.2013 17:12

zzzzzz,

Можно вынести повторяющую часть в отдельную функцию, остальное передавать как параметры в нее.
function req(data, success) 
{
    $.ajax({
        type: "POST",
        data: data,
        url: "/modules/notepad/module.php",
        success: success
    });
}

function openNotepad()
{
    var npid = $(this).attr('id');
    req("open=ok&npid=" + npid, function(data)
    {
        $("body").append('<textarea class="notepad' + npid + ' notepadDialog"></textarea>');
        $('.notepad' + npid).text(data).dialog({ dialogClass: npid, width: 650, height: 450, title: "БЛОКНОТ", closeText: "✖", resizable: true, 
            close: function(event, ui) {$(this).dialog('destroy').remove()},
        });
    });
}


function saveNotepad()
{
    var npid = $(this).attr('class');
    var data = "saveAs=ok&name=" + name + "&text=" + text;
    req(data, function(data)
    {
        $('#page').append(data);
        $('#page>div').last().fadeIn();
    });
}


Часовой пояс GMT +3, время: 07:57.