如何在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 );