#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 использовал в вашем браузере, чтобы посмотреть, получите ли вы что-нибудь (или перенаправите)?