Javascript 如何编写一个自定义回调成功方法来将响应存储在对象中,然后根据响应做一些事情?
对于ajax调用,如:Javascript 如何编写一个自定义回调成功方法来将响应存储在对象中,然后根据响应做一些事情?,javascript,jquery,ajax,callback,Javascript,Jquery,Ajax,Callback,对于ajax调用,如: $.ajax({ .... success :function(data){ }, error :function(error){ }); 有没有办法从success函数中获取数据并将其存储在变量中?根据收到的数据,我必须存储一些属性 如果没有,我可以做类似的事情吗 myCustomAjax({post data}, async, successFn, errorFn); successFn将是我希望基于某些行为从外部操纵的回调 var a
$.ajax({
....
success :function(data){
},
error :function(error){
});
有没有办法从success函数中获取数据并将其存储在变量中?根据收到的数据,我必须存储一些属性
如果没有,我可以做类似的事情吗
myCustomAjax({post data}, async, successFn, errorFn);
successFn
将是我希望基于某些行为从外部操纵的回调
var ajaxUrl = "/your/ajax/url";
myCustomAjax = function(data, isAsync, successCallback, errorCallback) {
$.ajax(ajaxUrl, {
data: data,
async: isAsync,
success: successCallback,
error: errorCallback
}
}
这是你想要的吗
是的,你们可以将结果存储在任何你们想要的变量中,但我猜你们并不是真的想要——你们在这里处理的是异步编程,所以你们可能会遇到竞争条件和其他问题。使用回调。我仍然不完全理解您的问题,但注释框不足以满足我需要键入的内容:这种想法实际上只与接收JSON的ajax调用相关,JSONP请求可以做一些其他事情
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="../scripts/jquery-1.5.1.min.js"></script>
</head>
<body>
<script language="javascript">
function doX() { alert("x"); }
function doQ() { alert("q"); }
function doY() { alert("y"); }
(function () {
$.ajax({
url: "json.txt",
dataType: 'json',
cache: false,
success: function (data, textStatus, jqXHR) {
if (data.mySuccessProperty == "succeeded") {
doX();
(function () { eval(data.dynamicFunction)(); })();
}
else {
doY();
(function () { alert("Z"); })();
}
},
error: function (jqXHR, textStatus, error) {
// handle error
alert("error" + error);
}
});
})();
</script>
</body>
</html>
输出将是
alert x
alert q
对我来说,很多这样的想法都很愚蠢,我只是编写了一些你可以做的随机事情,但是如果没有使用这些想法的应用程序的上下文,它们就不一定有意义。你能澄清这个问题吗?是的,您可以将其存储在变量中,以便在该函数之外使用它。只要像“mynewdata=data;”那样分配它,就会将它存储在全局对象中,这样您就可以像mynewdata、window.mynewdata或window[“mynewdata”]一样访问它了!我不想将其存储在全局变量中,而是使用闭包或回调函数……听起来您已经知道如何执行所要求的操作。@标记您的观点是什么?我只是在尝试,如果有其他方法,我可以提取的反应…顺便问一下,什么是背后的投票否决的原因?如果你想投反对票,请给出一个合理的理由。@paul我投了你的反对票,因为我认为这个问题缺乏细节,当你提出建议时,你基本上说你知道怎么做。我的意思是不要问你已经知道答案的问题。在我的评论中,我并不打算向您全面介绍javascript。只要给你一个选择。如果你对如何解决问题有想法,那么应该将其包含在你的帖子中,以便其他读者能够清楚地看到。当我要求你澄清这个问题时,你没有做任何努力,只是反驳了我。谢谢@wildcard…假设我必须使用回调成功函数来获取一些值…假设我的返回json看起来像Ethanks@wildcard…假设我必须使用回调成功函数来获取一些值…假设我的返回json看起来像{“职业”:“艺术家”,“年龄”:“26”}…现在我可以像myCustomAjax一样使用回调函数({name:“mike”},true,function(){update()},errorCallback);var update=(function(){var something=function(data){//domething};return something;});…不确定是否可以,但需要将
数据
对象传递给回调函数,因此它必须是函数(数据){update(数据)},errorCallback);var update=(函数(数据){(…)
…不确定为什么要将update
包装到附加函数中,如果不这样做,可以简单到update,errorCallback);var update=(函数(数据){(…)
-因为jQuery将调用update(数据)
无论如何。上面示例中的success函数已经是匿名函数了。我的意思是,自动执行的匿名函数不必担心语法。它只是一个伪代码…(function(){}())…是一个自动执行的函数…好吧,我完成了它。有些代码是完全随机的,我在不需要的时候使用匿名函数和其他奇怪的东西。他们只是想尝试找出@paul想要得到的答案。谢谢!…实际上新的jquery 1.5附带了promise Api,它解决了我的很多问题AJAX callback…但我感谢你的帮助…现在有了promise api,我可以链接我的回调。。。
alert x
alert q