从AJAX响应中调用jQuery中的函数

时间:2014-01-23 00:37:28

标签: ajax jquery

我正在与一个问题作斗争很长一段时间,我无法找到答案。我正在使用带有jQuery的Script#。在Script#中我定义了以下函数:

(function($) {
    ////////////////////////////////////////////////////////////////////////////////
    // Scrn

    window.Scrn = function Scrn() {
    }
    Scrn.openSuccess = function Scrn$openSuccess(txt) {
        /// <param name="txt" type="String">
        /// </param>
        $('#alrtS').css('display', 'block');
        $('#alrtS span').html(txt);
    }
    Scrn.openModal = function Scrn$openModal(cap, txt) {
        /// <param name="cap" type="String">
        /// </param>
        /// <param name="txt" type="String">
        /// </param>
        $('#frmModalLabel').html(cap);
        $('#frmModalBody').html(txt);
        $("#frmModal").modal("show");
    }


    Scrn.registerClass('Scrn');
})(jQuery);

从另一个脚本我发出一个AJAX请求,返回一个Javascript。

(function($) {
    clsAJAX.fnAJAX = function clsAJAX$fnAJAX(hash) {
        var sdata = {};
        sdata.script = scrp;
        sdata.page = true;
        jqAO.data = sdata;
        jqAO.dataType = 'script';
        jqAO.cache = true;
        jqAO.url = url;
        jqAO.success = function(data, textStatus, request) {
        };
        $.ajax(jqAO);
    }
})(jQuery);

我的问题是,Javascript如何调用jQuery函数中的代码?例如:服务器返回Javascript代码

Scrn.openSuccess("test");doucment.title="foo page";

然后我会收到函数Scrn.openSuccess不存在的错误。那么,返回的代码应该如何调用Scrn.openSuccess()?

至于为什么有很多奇怪的变量如jqAO,脚本#不支持直接输入。

3 个答案:

答案 0 :(得分:0)

您必须将ajax创建为可以从其他范围调用的函数

(function ($) {
    //create a named function reference in the global scope so that script in another scopes can use it
    window.myAjax = function () {
        var sdata = {};
        sdata.script = scrp;
        sdata.page = true;
        jqAO.data = sdata;
        jqAO.dataType = 'script';
        jqAO.cache = true;
        jqAO.url = url;
        jqAO.success = function (data, textStatus, request) {};
        $.ajax(jqAO);
    }

    myAjax();
})(jQuery);

然后在另一个脚本中调用

myAjax()

答案 1 :(得分:0)

所以,这是结果,我改变了代码的语法,更加面向对象,如果它们是对象方法,则不需要命名函数

(function($) {
   // Scrn
    window.Scrn = {
        openSuccess : function(txt) {
            /// <param name="txt" type="String">
            /// </param>
            $('#alrtS').css('display', 'block');
            $('#alrtS span').html(txt);
        },
        openModal : function(cap, txt) {
            /// <param name="cap" type="String">
            /// </param>
            /// <param name="txt" type="String">
            /// </param>
            $('#frmModalLabel').html(cap);
            $('#frmModalBody').html(txt);
            $("#frmModal").modal("show");
        }    
    }
    clsAJAXX = {
        fnAJAX : function(hash,successHandler,errorHandler) {
            // Data sent to server I guess
            var sdata = {};
            sdata.script = "";
            sdata.page = true;
            // Ajax request parameters
            var jqAO = {};
            jqAO.data = sdata;
            jqAO.dataType = 'script';
            jqAO.cache = true;
            jqAO.url = "http://dummy.com/getmyscript.jsp";
            jqAO.success = successHandler;
            jqAO.error = errorHandler;
            $.ajax(jqAO);
        }
    }
    //Call
    clsAJAXX.fnAJAX("myhash",Scrn.openSuccess,null);
})(jQuery);

DEMO:http://jsfiddle.net/AjYF2/ 这个演示展示了AJAX函数中成功处理程序的调用 - 这只是一个例子,因为我评论了Jquery Ajax调用(需要一个正确的url)并通过调用替换它。

答案 2 :(得分:0)

似乎并没有那么复杂。 返回的Javascript代码:

$(function(){ Scrn.openSuccess("test");doucment.title="foo page"; });