如何在WordPress的外部可重用javascript文件中调用jQuery.ajax? 问题

如何在WordPress的外部可重用javascript文件中调用jQuery.ajax? 问题,javascript,jquery,ajax,wordpress,Javascript,Jquery,Ajax,Wordpress,我在文件addcp modal.js中有一个名为dbInsertCostPlace(nameText)的函数,它调用了文件wpdb helper.js中的另一个名为dbInsertCostPlace(onSuccess,onError)的函数,从而进行jQuery.ajax调用。但是,ajax调用在单独的文件wpdb helper.js中时不起作用。ajax调用仅在与调用它的函数位于同一文件中时才起作用 文件夹 addcp modal.js,在wpdb helper.js中调用ajax函数: 基

我在文件
addcp modal.js
中有一个名为
dbInsertCostPlace(nameText)
的函数,它调用了文件
wpdb helper.js
中的另一个名为
dbInsertCostPlace(onSuccess,onError)
的函数,从而进行
jQuery.ajax
调用。但是,ajax调用在单独的文件
wpdb helper.js
中时不起作用。ajax调用仅在与调用它的函数位于同一文件中时才起作用

文件夹
addcp modal.js
,在
wpdb helper.js
中调用ajax函数: 基于这个简短的(但很好的):

使用
wp\u enqueue\u脚本(“jQuery”)在页脚(而不是页眉)中包含jQuery定义

您还可以添加一个匿名作用域(同样,在页脚中),以使用
$
而不是
jQuery
,方法是:

(function($) {

    // $ Works! You can test it with next line if you like
    // console.log($);

})( jQuery ); 

这应该可以使您在project中的所有文件中都可以看到
jQuery
,我发现了问题,现在感觉很傻。变量“nameText”未定义。我忘了将其作为参数传递到wpdp helper方法中。一旦我传入一个nameText值,ajax调用就起作用了。

这取决于如何声明第三方LIB…似乎
jQuery
没有全局定义。也许您可以尝试传递
jQuery
实例-
dbInsertCostPlace:function(jQuery,onSuccess,onError)
并使用
dbInsertCostPlace($,onSuccess,onError)
@ymz首先,我在wpdb助手中打印了jQuery,但没有定义它。我也试着像你建议的那样传递jQuery对象,但是当它运行ajax调用时仍然没有发生任何事情。我还没有阅读全部内容,但是看起来你有一个包含HTML的
*.js
文件。。。?那不行。或者你的意思是写
添加cp modal.php
?@ChrisG不,它是一个.js文件。我对javascript非常陌生。但是javascript是在标签中的。如果我将html与javascript混合使用,是否应该将其转换为.html文件?除非您使用特殊的框架,否则无法将任何html放入
*.js
文件,甚至
标记中。JS文件包含JS,并且仅包含JS。如果需要向wordpress页面添加HTML和JS,则需要使用模板系统添加HTML,并单独添加脚本。上面的脚本肯定会导致浏览器控制台中出现解析错误。我也试过了。没用。jQuery未定义没有任何问题。但是出于某种原因,调用jQuery.ajax()没有任何作用。没有错误,没有日志,什么都没有。在这种情况下,请检查您的网络流量(使用浏览器开发人员工具-例如:),并验证您的ajax调用记录在那里并且具有正确的值(可能外部文件中未正确定义
ajaxurl

<script>

  var wpdbhelper = {

    dbInsertCostPlace: function(onSuccess, onError) {
      console.log("wpdb-helper: ajaxurl: " + ajaxurl);
      jQuery.ajax({
        url : ajaxurl,
        type: 'POST',
        data: {
          'action': 'insert_costplace',
          'data': {
            'name': nameText,
            'age': 17
            }
        },
        success: function(result) {
          console.log("SUCCESS");
        },
        error: function(jqXHR, textStatus, errorThrown) {
          console.log("ERROR");
        }
      });
      console.log("wpdb-helper: After ajax call.\n");
    },

    loadCostPlaces: function (onSuccess, onError){
        console.log("loadCostPlaces called inside wpdbhelper");
        jQuery.ajax({
          url : ajaxurl,
          type: 'POST',
          data: {
            action: 'get_costplaces'
          },
          dataType: 'json',
          success: function(result) {
            console.log("SUCCESS");
          },
          error: function(jqXHR, textStatus, errorThrown) {
            console.log("ERROR");
          }
        });
      }

  };

</script>
(function($) {

    // $ Works! You can test it with next line if you like
    // console.log($);

})( jQuery );