jQuery / Ajax -$.ajax () передача параметров для обратного вызова-хороший шаблон для использования?


JavaScript-код, я начинаю с:

function doSomething(url) {  
   $.ajax({
      type: "GET",  
      url: url,  
      dataType: "xml",  
      success: rssToTarget  
   });  
}    

шаблон, который я хотел бы использовать:

//where elem is the target that should receive new items via DOM (appendChild)
function doSomething(url, elem) {
   $.ajax({
      type: "GET",
      url: url,
      dataType: "xml",
      success: rssToTarget(elem)
   });
}  

Я не думаю, что смогу заставить обратный вызов работать таким образом, верно? Что такое правильный шаблон? Я не хочу использовать глобальные переменные обязательно для временного удержания elem или имя Элем.

2 73

2 ответа:

такой...

function doSomething(url, elem) {
  $.ajax({
     type: "GET",
     url: url,
     dataType: "xml",
     success: function(xml) {
       rssToTarget(xml, elem);
     }
  });
}

ответа на ваш комментарий: влияет ли использование анонимных функций на производительность?

шаблон, который вы хотели бы использовать может работать, если вы создадите закрытие внутри вашей функции rssToTarget:

function rssToTarget(element) {
  return function (xmlData) {
    // work with element and the data returned from the server
  }
}

function doSomething(url, elem) {
    $.ajax({ type: "GET",
         url: url,
         dataType: "xml",
         success: rssToTarget(elem)
       });
}

, когда rssToTarget(elem) выполняется, параметр элемента хранится в закрытие, и функция обратного вызова возвращается, ожидая выполнения.