【问题标题】:Drupal module jQuery PHP script location issueDrupal 模块 jQuery PHP 脚本位置问题
【发布时间】:2011-12-26 21:46:35
【问题描述】:

我正在开发一个模块,它有一个带有一些 AJAX 代码的 jQuery 脚本。 ajax 代码调用与 jQuery 脚本位于同一位置的 php 脚本。

我的问题是,AJAX 在 PHP 脚本名称前附加了域名,当然,我的脚本在该位置不存在,因此进程中断。

AJAX代码如下:

    $(document).ready(
    function(){

        $.ajax({
          url: "/testscript.core.php",
          asych: false,
          success: function($data){
            $('textarea#edit-simplechat-messages').text( $data );
          }
        });

    }
);

以下是萤火虫中显示的链接:

http://testsite.co.uk/testscript.core.php

同样,jQuery 脚本和 php 脚本在同一个目录中。 我以为我的 php 脚本名称之前的正斜杠会消除域名,但它不起作用。

【问题讨论】:

    标签: php jquery ajax drupal module


    【解决方案1】:

    现在看起来你的问题文件名前的斜线......这意味着“域网络根”

    【讨论】:

    • 没有斜线我得到以下内容:testsite.co.uk/node/testscript.core.php。我的模块结构中甚至没有“节点”目录
    • 听起来像是一个 url 重写问题.. 您是否尝试在浏览器中输入您希望 ajax 调用使用的 url 以查看是否收到任何内容(或重定向)?
    【解决方案2】:

    使用

    Drupal.settings.basePath
    
    url: Drupal.settings.basePath+'your file path',
    

    这个链接可能有用

    http://www.akchauhan.com/how-know-base-path-of-drupal-in-javascript/

    编辑:

    或者,如果您正在创建自己的自定义模块,则可以使用此方法,然后按照以下步骤操作

    1] 首先创建你的模块,这里我的模块名是“mymodule”,所以我创建了一个文件名mymodule.module

    <?php
    
    function mymodule_init() {
        drupal_add_js(drupal_get_path('module', 'mymodule') . '/mymodule.js');
        // this call my js file when module is initialized.
    }
    
    function mymodule_menu(){
        $items = array();
    
        $items['mypath'] = array(
            'title' => t('To get series of the selected brand'),
            'page callback' => 'mymodule_page',
            'page arguments' => array(1),
                 // get test_parameter from url, which is your first argument
                 //http://domain.com/mypath/test_parameter
                 // here mypath is arg(0), and test_parameter is arg(1)
            'access arguments' => array('access content'),
            'type' => MENU_CALLBACK,
        );
    
        return $items;
    }
    
    function mymodule_page($termID){
        return drupal_json(array('message'=> $itemID));
    }
    

    2] 其次创建同名的js文件,将其命名为mymodule.js在同一个模块文件下。

    // $Id$
    
    Drupal.behaviors.mymodule = function (context) {
        var $basepath = Drupal.settings.basePath;
        $('selector').change(function(e){
            $.ajax({
                type: 'POST',
                url: $basepath+'mypath/test_parameter',
                        // test_parameter :value you are sending to you module.
                dataType:'json',
                cache:false,
                beforeSend:function(){              
    
                },
                success:function(data){
                    alert(data.message);
                },
                complete:function(){
    
                },
                error:function(xhr, status, error){
    
                }
            });
        });  
    }
    

    在 js 文件中注意我使用了 mypath。你的 js 文件会调用这个在 hook_menu() 中定义的路径。

    【讨论】:

    • 文件名前不要包含 /。
    • @sisko 查看我编辑的答案。如果您按照这些步骤操作,则无需创建 .php 文件以供您的 .js 文件调用。
    猜你喜欢
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-06
    • 2016-02-28
    相关资源
    最近更新 更多