【问题标题】:Javascript callback after ajaxajax后的Javascript回调
【发布时间】:2013-10-13 11:18:35
【问题描述】:

您好我想问一下:有没有办法调用带参数的json对象中返回的函数?例如我有ajax什么时候成功我在那个对象中返回一个json对象我有{"callback":{"func":"doAlert","param":"param1"}}

sucsess:function(data){
 data.callback.func(data.callback.param);
}

我有

var doAlert=function(param){
alert(param);
}

我明白了,我的函数没有定义。

【问题讨论】:

  • 在 Jquery Ajax 的 success: 参数中尝试 JSON.parse(data);。你可以提醒它或记录它的响应是什么。
  • 感谢您的快速评论,再次显示此消息 TypeError: data.callback.func is not a function
  • 你能否提醒数据(Ajax 请求的响应)或记录它以查看它实际上是什么?
  • 尝试使用window[data.callback.func](data.callback.param),假设doAlert在全局范围内。否则将window替换为对应的范围。
  • 问题是data.callback.func只包含字符串"doAlert",而不是对函数的引用。但如果它在全局范围内,您可以通过其名称访问它来获取该引用,因此是window[data.callback.func]

标签: javascript ajax json callback


【解决方案1】:

不要使用评估。做吧

window[data.callback.func](data.callback.param);

【讨论】:

    【解决方案2】:

    是的。您必须使用 eval 来评估表达式:

    eval(data.callback.func)(data.callback.param);
    

    【讨论】:

    • eval 是邪恶的,你肯定没有使用它。
    • 但这是对他问题的回答。那么为什么要投反对票呢?也许这不是最好的答案,也不会接受。但这不是错的教授。
    • 因为这不是一个好的答案。如果eval可以避免,那就应该避免。而“必须”是完全错误的。
    【解决方案3】:

    您需要使用 EVAL 将 JSON 中的函数名从字符串转换为函数

    var funcevaluated=eval(data.callback.func);
    funcevaluated(data.callback.param);
    

    JSFiddle 中的工作示例:

    http://jsfiddle.net/ghjZu/

    【讨论】:

    • 不,您不需要使用eval
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 2011-06-26
    • 2015-05-20
    • 2013-01-01
    相关资源
    最近更新 更多