Проблема с расположением скрипта jQuery PHP модуля Drupal

#php #jquery #ajax #drupal #module

#php #jquery #ajax #drupal #модуль

Вопрос:

Я разрабатываю модуль, в котором есть скрипт jQuery с некоторым кодом AJAX. Код ajax вызывает php-скрипт, расположенный в том же месте, что и скрипт jQuery.

Моя проблема в том, что AJAX добавляет имя домена перед именем скрипта PHP и, конечно же, мой скрипт не существует в этом местоположении, и поэтому процесс прерывается.

Код AJAX выглядит следующим образом:

     $(document).ready(
    function(){

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

    }
);
  

И следующая ссылка, которая отображается в firebug:

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

Опять же, скрипт jQuery и скрипт php находятся в одном каталоге.
Я думал, что косая черта перед именем моего php-скрипта удалит доменное имя, но это не сработало.

Ответ №1:

Использование

 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().

Комментарии:

1. Не включайте / перед именем вашего файла.

2. @sisko проверяет мой отредактированный ответ. Если вы выполните эти действия, то вам не нужно, чтобы созданный файл .php вызывался вашим файлом .js.

Ответ №2:

похоже, что сейчас ваша проблема в косой черте перед именем файла .. это означает «веб-корень домена»

Комментарии:

1. Без косой черты я получаю следующее: testsite.co.uk/node/testscript.core.php . В структуре моего модуля даже нет каталога ‘node’

2. похоже на проблему с перезаписью URL .. вы пробовали вводить URL, который вы хотите, чтобы вызов ajax использовал в вашем браузере, чтобы посмотреть, получите ли вы что-нибудь (или перенаправите)?