Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.04.2013, 00:40
Кандидат Javascript-наук
Отправить личное сообщение для zzzzzz Посмотреть профиль Найти все сообщения от zzzzzz
 
Регистрация: 25.09.2012
Сообщений: 111

Оптимицация множественных &.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.
Ответить с цитированием
  #2 (permalink)  
Старый 04.04.2013, 01:15
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

А я вижу что по сути не_меняется только type и url )))
причем если использовать $.post, то тайп указывать не придется. А url можно в переменную вывести. И это не оптимизация (от всех этих перестановок код быстрее работать не станет), это - рефакторинг.
Ответить с цитированием
  #3 (permalink)  
Старый 04.04.2013, 17:12
Профессор
Отправить личное сообщение для Hoshinokoe Посмотреть профиль Найти все сообщения от Hoshinokoe
 
Регистрация: 08.01.2012
Сообщений: 253

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();
    });
}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск