在没有回调的ajax请求之后返回值

时间:2018-09-06 09:16:10

标签: javascript ajax

我的JS有点生锈。我在

上遇到问题
LaravelRoutes.route( 'route-name' );

在初始ajax完成之前在应用程序中被调用。

我希望能找到一种方法,将返回值推迟到routes变量不再为null之前不做类似的事情;

LaravelRoutes.roue( 'route-name', [], function( uri ) {

});

反正有这样做吗?

致谢

var LaravelRoutes = new function() {

    var routes = null;

    /**
     * Load JSON
     * @param path
     * @param success
     * @param error
     */
    var loadJSON = function( path, success, error )
    {
        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function()
        {
            if (xhr.readyState === XMLHttpRequest.DONE) {
                if (xhr.status === 200) {
                    if (success)
                        success(JSON.parse(xhr.responseText));
                } else {
                    if (error)
                        error(xhr);
                }
            }
        };
        xhr.open( "GET", path, true );
        xhr.send();
    };

    /**
     * Get Router
     * @param name
     * @param callback
     * @returns {*}
     */
    var getRouter = function( name, callback )
    {
        if( typeof routes[ name ] !== 'undefined' ) {
            return callback( routes[ name ] );
        } else {
            console.log( 'route [' + name + '] does not exist' );
        }
    };

    /**
     * Generate Route Uri
     * @param router
     * @param _parameters
     * @returns {string}
     */
    var generateRouteUri = function( router, _parameters )
    {
        var parameters = _parameters || [];
        router.uri_variables.forEach( function( variable ) {
            var replaceWith = parameters.shift() || null;
            router.path = router.path.replace( '{' + variable + '}', replaceWith );
        });
        return '/' + router.path;
    };

    loadJSON( window.routesUrl ? window.routesUrl : '/routes.json', function( data ) {
        routes = data;
    });

    return {
        route : function( name, parameters )
        {
            return getRouter( name, function ( router ) {
                return generateRouteUri( router, parameters );
            });
        }
    }

};

0 个答案:

没有答案