#javascript #jquery
#javascript #jquery
Вопрос:
Хорошо, обычно у меня есть функция-оболочка запроса ajax, куда я передаю $data $sucessFunctionA
и выполняю $.ajax
запрос.
Но то, что я хочу сделать, это создать другую функцию: $successFunctionB
которая принимает $sucessFunctionA
в качестве параметра.
Итак, я передаю $data и $successFunctionB
в $.ajax
запрос.
Предположим, что это успешный результат. $successFunctionB
выполняется. $successFunctionB
проверяет результат данных на наличие значения. Если это определенное значение, то оно будет выполнено $successFunctionA
. Что может меня смущать, так это то, что функция sucessFunction для запроса ajax может иметь только один параметр в качестве входных данных, который является результирующими данными.
Вот неработающий код того, что я пытаюсь сделать
function ajaxCall($data,$successFunctionA)
{
var $successFunctionB = function($data,$successFunctionA)
{
data = jQuery.parseJSON($data);
if(data.result=='good')
{
$successFunctionA(data);
}
}
$.ajax(
{
type:'POST',
url:'server.php',
datatype:'json',
data:$data,
success:$successFunctionB,
});
}
Ответ №1:
Вам не нужно передавать $successFunctionA в $successFunctionB — функция B будет иметь доступ к функции A, потому что в javascript функции являются замыканиями. Итак, код выглядит следующим образом:
function ajaxCall($data,$successFunctionA)
{
var $successFunctionB = function($data)
{
data = jQuery.parseJSON($data);
if(data.result=='good')
{
$successFunctionA(data);
}
};
$.ajax(
{
type:'POST',
url:'server.php',
datatype:'json',
data:$data,
success:$successFunctionB,
});
}
Это одна из самых важных концепций в js, поэтому, если вы не знакомы с замыканиями, я бы посоветовал ознакомиться с ними: http://blog.morrisjohns.com/javascript_closures_for_dummies
Ответ №2:
Если вы используете jQuery 1.6 или выше, $.proxy
можете применить частичные параметры:
$.ajax(
{
type:'POST',
url:'server.php',
datatype:'json',
data:$data,
success:$.proxy($successFunctionB, this, $successFunctionA)
});
Первый параметр — это выполняемая функция, второй — контекст this
указателя. Любые последующие параметры будут переданы $successFunctionB
функции. Наконец, $.ajax
вызов добавит свои собственные данные в качестве последнего параметра, поэтому вы должны изменить их порядок следующим образом:
var $successFunctionB = function($successFunctionA, $data)