Javascript - 无法从另一个文件调用函数

时间:2014-06-01 07:55:04

标签: javascript jquery

我正在尝试从另一个js文件中的一个文件调用一个函数。

general.js

function delete_post(post_id, post_type, nonce) {
    $.post(Ajax.ajaxurl, { action: 'delete_post', post_id: post_id, nonce: nonce, post_type: post_type}, function (data) {
        var result = $.parseJSON(data);
        if (result.status == 'error') {
            $('#post_'+post_id).prepend('<div class="alert alert-danger">' + result.message + '</div>');
        }
        if (result.status == 'success') {
            $('#post_'+post_id).fadeOut(1000, function(){

                $(this).remove();
            });
        }
    });
}

details.js

$('body').on('click', '.remove-row', function (e) {
    e.preventDefault();
    var post_id = $(this).attr('data-target');
    var nonce = $(this).attr('data-nonce');
    var parent_id = $(this).attr('data-parent');
    var post_type = $(this).attr('data-post_type');
    bootbox.confirm(Ajax.are_you_sure, function(result) {
        if (result) {

            delete_post(post_id, post_type, nonce);

        }
    });
});

在页面上,它们以正确的顺序加载:

<script type='text/javascript' src='http://domain.com/js/general.js?ver=3.9.1'></script>
<script type='text/javascript' src='http://domain.com/js/details.js?ver=3.9.1'></script>

但是,当我点击remove-row按钮时,我会Uncaught ReferenceError: delete_post is not defined

我错过了什么?

1 个答案:

答案 0 :(得分:1)

该错误告诉我们您没有显示general.js的全部内容,特别是delete_post的函数声明位于另一个函数内(下面是一个可能的示例)。所以它不是全球性的。

如果你想让它成为一个全球性的,你可以把这一行放在general.js中:

window.delete_post = delete_post;

window对象的属性是全局变量。

一般情况下,我建议将全局变量保持在最低限度,因此您可能希望在这些行中使用一个全局对象用于所有内容:

if (!window.myApp) {
    window.myApp = {};
}
window.myApp.delete_post = delete_post;

...然后代替

delete_post(post_id, post_type, nonce);

...在您的其他文件中,请使用

myApp.delete_post(post_id, post_type, nonce);

当我说它在另一个函数中时,这是一个例子:

$(document).ready(function() {

    function delete_post() {
        // ...
    }

});

您的示例可能略有不同,但这就是要点。