0

下面的代码有问题。我在网站上进行了搜索,结果很接近但没有雪茄。

我希望在单击附加到 .callapp 的项目时执行以下操作:

  1. $jQuery.load 使用从 getURL(xapp) 收到的 url 的内容部分
  2. 不管状态是什么,执行“requesthandler”
  3. 如果请求恰好成功,“请求处理程序”使用 onSuccess 并执行它

我不确定如何执行我传递给“请求处理程序”的匿名函数。我需要这个匿名函数来使用我传入的参数执行“loadURL”函数,然后这将引发与这篇文章无关的另一个事件链。

谢谢!

var url = "";
var tab = "";
var app = "base";
var out = "";
$(document).ready(function() {
    $(".callapp").click(function(e) {
        e.preventDefault();
        $('#wxreturn').html("<div id='xtools'></div><div id='xerror'></div><div id='xdapps'></div>");
        hideContent(1, 1);
        $('#xdapps').load( getURL("base"), function(resp, stat, xhr) {
            requesthandler(iStat, iXHR, 0, 0, 0, 0, function() {
                loadURL("tools", "xtools", 1, 1, 1, 1);
            });
        });
        return 0;
    });
});
// piece together a url
function getURL(xapp) {
    // url to return
    var url = null;
    // global tab must not be empty
    if (tab.length) {
        // check if app is defined
        if (!xapp.length) {
            // app is either the global or base
            xapp = app | "base";
        } else {
            // set the global
            if (!(xapp == "tools") && !(xapp == "options")) app = xapp;
        }
        // set the url to return
        url = "/" + tab.toLowerCase() + "/" + xapp.toLowerCase() + "?_=" + Math.random();
    } else {
        // undefined functionality error
        alert("Invalid getURL...Tab Missing");
    }
    // return the url
    return url;
}
// load a url
function loadURL(xapp, target, showApp, showOpt, showTools, clearTools) {
    // defaults
    showApp = showApp | 0;
    showOpt = showOpt | 0;
    showTools = showTools | 0;
    clearTools = clearTools | 0;
    // do only if app and target are defined
    if (!(xapp == undefined) && !(target == undefined)) {
        // set target
        if (!(target.contains("#"))) target = "#" + target;
        // get url string
        var url = getURL(xapp);
        // check if null
        if (!(url == null)) {
            // commence with load   
            $(target).load(url, function(resp, stat, xhr) {
                // call back with the request handler
                requesthandler(stat, xhr, showApp, showOpt, showTools, clearTools);
            });
        }
    } else {
        // undefined functionality error
        alert("Invalid LoadURL...Missing App...Target");
    }
}
// request handler
function requesthandler(stat, xhr, showApp, showOpt, showTools, clearTools, onSuccess) {
    // defaults
    showApp = showApp | 0;
    showOpt = showOpt | 0;
    showTools = showTools | 0;
    clearTools = clearTools | 0;
    onSuccess = onSuccess | null;
    // check for status
    if (stat == "success") {
        // execute
        if (!(onSuccess == null)) {
            // perform function
            (onSuccess());
        }
    } else {
        if (xhr.status == 401) {
            // throw session expired
            sessionTimeOut();
        } else if (xhr.status == 403) {
            // throw authorization failure
            failedAuthorize();
        } else {
            // throw application request failure
            failedAPPRequest(clearTools);
        }
    }
}
4

1 回答 1

3
onSuccess = onSuccess | null;

您需要在|这里使用两个,而不是一个。

showApp = showApp || 0;
showOpt = showOpt || 0;
showTools = showTools || 0;
clearTools = clearTools || 0;
onSuccess = onSuccess || null;

为了安全起见,我会onSuccess在运行它之前检查它是否是一个函数(不仅仅是它不为空):

if (typeof onSuccess === 'function') {
    // perform function
    onSuccess();  // the extra "()" aren't needed here
}

如果您这样做,onSuccess || null则不需要。

于 2012-07-24T15:29:56.420 回答