Ajax调用使用php文件放在Osclass分类脚本的主题文件夹中?

时间:2016-06-17 06:32:09

标签: javascript php ajax osclass

我正在使用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不存在”}

注意:使用注释的代码行

可以正常工作

3 个答案:

答案 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 heresome 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.phpfooter.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 WAY

  

要注意当前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()调用到您的表单中。

非OSCLASS方式

  

只需在您的主题或所需的任何位置创建一个文件,并确保将其放入<?php require_once __DIR__ . RELATIVE_PATH_TO_OC_LOAD_FILE . 'oc-load.php'; ?>,然后将逻辑构建到其中。