我正在使用Osclass分类脚本,试图提醒ajax调用返回的消息。 我的ajax-test.php文件保存在我的主题文件夹中,包含
<?php
$name = $_GET["name"];
echo "I am " . $name
?>
我的JavaScript函数代码是
function findName() {
var name = "Jhon";
$.ajax({
method: "POST",
// url: "oc-content/themes/bender/ajax-test.php",
url: 'http://127.0.0.1/osclass/index.php?page=ajax&action=custom&ajaxfile=ajax-test.php',
data: { name : name },
success: function (data) {
alert(data);
},
})
}
有人告诉我,我做错了什么?它提醒 {“error”=&gt; “ajaxFile不存在”}
注意:使用注释的代码行
可以正常工作答案 0 :(得分:0)
您正在使用
> method: "POST",
在ajax中你为什么要使用GET?
$name = $_GET["name"];
使用Post获取它的价值。
$ name = $ _POST [“name”];
答案 1 :(得分:0)
不幸的是,这并不完全是ajax.php自定义操作的工作方式。
首先,page=ajax&action=custom
不能使用主题,只能使用插件,因为它会通过执行以下操作搜索插件文件夹中的ajaxfile
:
$filePath = osc_plugins_path() . $ajaxfile; // eg. /oc-content/plugins/$ajaxfile
然后,您必须传入ajaxfile
插件的名称才能工作。如果您使用的是Madhouse Messenger插件,您可以执行以下操作:
page=ajax&action=custom&ajaxfile=madhouse_messenger/main.php
但是,从3.3开始,使用page=ajax&action=custom
时,除了ajaxfile
参数之外,您不再使用route
参数。您可以查看how routes work here和some examples of routes here。
答案 2 :(得分:0)
functions.php
中的
添加如下内容:
//name of your custom ajax request
$my_custom_ajax_request_name = 'doSomethingCool';
osc_add_hook('ajax_' . $my_custom_ajax_request_name, $my_custom_ajax_request_name);
function doSomethingCool()
{
// set default response
$response = [
'status' => false,
'msg' => 'Default Error Message...',
];
// token protection
// read more about csrf token:
// https://dev.osclass.org/2013/02/19/make-your-plugins-more-secure-with-anti-csrf-functions/
osc_csrf_check();
// get request parameters
$param1 = Params::getParam('param1');
$param2 = Params::getParam('param2');
// do some logic here ex: check if user is logged in
if (osc_is_web_user_logged_in()) {
$response['status'] = true;
$response['msg'] = 'User is logged in. ;-) ' . $param1 . ' ' . $param2 . '! ' . osc_logged_user_name();
} else {
$response['status'] = false;
$response['msg'] = 'User is not logged in. :-(';
}
// return json response
header('Content-Type: application/json');
echo json_encode($response);
exit;
}
您的模板文件中的某些位置,例如header.php
,footer.php
或您需要的所有其他内容...
<a data-param1="hello" data-param2="world" href="#" id="make-an-ajax-request">
Make an AJAX Request!
</a>
<script>
//here we hold some usefull info for easy access
var mySite = window.mySite || {};
mySite.base_url = '<?php echo osc_base_url(true); ?>';
mySite.csrf_token = '<?php echo osc_csrf_token_url(); ?>';
$(function(){
$('#make-an-ajax-request').on('click', function(e){
e.preventDefault();
// name of our custom ajax hook
var ajax_hook = 'doSomethingCool';
// get parameters
var param1 = $(this).data('param1');
var param2 = $(this).data('param2');
// build axjxa url
var url = mySite.base_url + '?page=ajax&action=runhook&hook='+ajax_hook+'&'+mySite.csrf_token;
//build data
var data = {
param1 : param1,
param2 : param2
};
$.ajax({
type: 'POST',
dataType: 'json',
data: data,
url: url
}).done(function (data) {
console.log(data);
if (data.status) {
} else {
}
});
});
});
</script>
要注意当前osclass从主题页面执行ajax请求的方式是调用
http://example.com/?page=ajax&action=runhook&hook=MY_HOOK_FUNCTION_NAME
并注册它osc_add_hook('ajax_MY_HOOK_FUNCTION_NAME', 'MY_HOOK_FUNCTION_NAME');
可选,但非常推荐使用 您可以实现的csrf token
,就像我为网址或网址所做的那样 通过直接将osc_csrf_token_form()
调用到您的表单中。
只需在您的主题或所需的任何位置创建一个文件,并确保将其放入
<?php require_once __DIR__ . RELATIVE_PATH_TO_OC_LOAD_FILE . 'oc-load.php'; ?>
,然后将逻辑构建到其中。