无法将函数从一个文件调用到另一个文件

时间:2017-09-06 09:01:34

标签: javascript

在我的代码中,我在file_1.js中定义函数并从file_2.js调用它 和文件的顺序是

public function actionExport_csv() {
    $model = new Companies();
    $session = Yii::$app->session;             
    if(isset($_POST['download'])){ if(!empty($_POST['selectedcols'])) {
        foreach($_POST['selectedcols'] as $check) {
            echo $check;//what will be the code here to download column in selectedcols
         }
    } 
}

任何人都可以帮我解决如何从另一个JS文件中调用该函数的问题吗?

File_1.js

<script type="text/javascript" src="File_1.js"></script>
<script type="text/javascript" src="file_2.js"></script>

file_2.js

(function( $ ) {
    function ps_get_posts( divid, type, query_args, cb) {
        var cb = cb || function () {};
        $.ajax({
          url: ajaxpagination.ajaxurl,
          type: 'post',
          data: {
            action: 'ajax_pagination',
            type: type,
            query_args: query_args
          },
          success: function( html ) {
            cb();
          },
          error: function(jqXHR, textStatus, errorThrown) {

          }
        });
    }
})( jQuery );

2 个答案:

答案 0 :(得分:1)

您的ps_get_posts完全属于您定义它的ready回调。你不能从ready回调的外部调用它而不以某种方式暴露它。

你可以将它设为全局,但浏览器上的全局命名空间令人难以置信地拥挤,一般情况下,尽可能避免使用全局变量。

一个选项是将自己限制为单个全局,这个对象可以放置您在文件之间访问所需的功能。所以在File1.js你可能会这样做:

var MyApp = {
    ps_get_posts: function( divid, type, query_args, cb) {
        var cb = cb || function () {};
        $.ajax({
          url: ajaxpagination.ajaxurl,
          type: 'post',
          data: {
            action: 'ajax_pagination',
            type: type,
            query_args: query_args
          },
          success: function( html ) {
            cb();
          },
          error: function(jqXHR, textStatus, errorThrown) {

          }
        });
    }
};

...然后在File2.js中:

MyApp.ps_get_posts(/*...*/);

如果您还有其他功能,则需要使用相同的方法,然后将它们添加到一个全局对象MyApp

答案 1 :(得分:0)

您的问题不是该功能在另一个文件中,而是在另一个范围内。我给你举个例子:

$(function () {
  function myFunction() {
    console.log('Hello world!');
  }
  
  myFunction(); //here the function exists
});


myFunction(); //here the function does not exist
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

您可以创建一个存储实用程序函数的全局对象,以使它们可以访问,就像jQuery那样:

window.MyUtils= window.MyUtils || {}

window.MYUtils.myFunction= function (...) {...};