Если загруженные данные извлекаются с того же сервера, что и исходная веб-страница, то да, как правило, у вас будет такой же уровень доверия к этому коду, как и в коде, который уже запущен в браузере.
Проблема с eval()
в таком контексте не обязательно заключается в том, что вы не доверяете коду, возвращаемому с вашего собственного сервера;это то, что кто-то может изменить работающий javascript так, чтобы переменная javascriptPath
указывала на то место, где вы этого не ожидали.
Что касается вашего фактического вопроса, ваш done
обратный вызовфактически будет передано три параметра, потому что ваш вызов when
включал три обещания.
Из-за способа, которым вы определили свой обратный вызов (как function(response)
), вы видите только первый - возвратзначение из вызова HTML.Два других параметра игнорируются.
Каждый из трех передаваемых параметров будет массивом из трех элементов: [wasSuccessful, statusText, jqxhr]
.Чтобы сделать что-то полезное с ними, вы можете структурировать свой обратный вызов примерно так:
$.when($.ajax(htmlPath), $.get(cssPath), $.ajax({
url: javascriptPath,
dataType: "text"
}))
.done(function(htmlResponse, cssResponse, jsResponse){
if (htmlResponse[0]) {
appendHtml(htmlResponse[2].responseText);
}
if (cssResponse[0]) {
appendCss(cssResponse[2].responseText);
}
if (jsResponse[0]) {
executeJs(jsResponse[2].responseText);
}
})
(при условии, что у вас уже есть соответствующие функции appendHtml
, appendCss
и executeJs
, уже написанные)
На этой странице есть несколько хороших примеров: http://api.jquery.com/jQuery.when/
И на этой странице есть документация по объекту jqxhr (третий элемент в каждом из массивов, которые передаются вашему готовомуфункция): http://api.jquery.com/jQuery.ajax/#jqXHR