переменные — Как я могу передать длинную строку JavaScript в PHP hook_menu в Drupal?

На mysite / build-order у меня есть длинный код заказа, который я собираю с использованием Javacsript и отправляю через _GET в URL на страницу hook_menu для обработки.

Это может быть столько же времени (или больше), и я отправляю его на страницу создания заказа следующим образом:

<script type="text/javascript">
//...building code
var orderCode = "sku:OR-4x4>qty:2>prc:55.00>nfo:OR-4x4,sku:CVR>qty:1>prc:50>nfo:OR-4x4,sku:PF>qty:15>prc:2>nfo:OR-4x4 (sdfsdfg),sku:EM>qty:2>prc:12.95>nfo:OR-4x4 (sdfsdfg),sku:SC>prc:25>qty:4>nfo:Some description,sku:DB>qty:10>prc:4>nfo:Some description,sku:ES>qty:10>prc:3>nfo:BlahBlah,sku:OR-4x4>qty:2>prc:55.00>nfo:OR-4x4,sku:CVR>qty:1>prc:50>nfo:OR-4x4,sku:PF>qty:15>prc:2>nfo:OR-4x4 (sdfsdfg),sku:EM>qty:2>prc:12.95>nfo:OR-4x4 (sdfsdfg),sku:SC>prc:25>qty:4>nfo:Some description,sku:DB>qty:10>prc:4>nfo:BlahBlah-visiondelimiter-Phasellus laoreet lorem vel dolor tempus vehicula. Curabitur blandit tempus ardua ridiculus sed magna. Quisque placerat facilisis egestas cillum dolore.-visiondelimiter-eventName";

var url = '/create-order/' + orderCode;
window.location.replace(url);
</script>

Я реализовал настройку hook_menu в моем пользовательском модуле под названием «create_order_menu», и он работает отлично.

function mymodule_create_order_menu($ordercode){

// do stuff with $ordercode

}

Все отлично работает. Единственная проблема заключается в том, что строка кода заказа, переданная через URL, иногда может быть вдвое длиннее, и это вызывает ошибку 404 на странице mysite / create-order. Когда я сокращаю код, это работает. Когда я снова его удлиняю, он ломается.

Есть ли лучший способ отправить такую ​​длинную переменную в мою настройку страницы hook_menu?

РЕДАКТИРОВАТЬ (на основе комментариев ниже)

На mysite / build-order у меня есть длинный код заказа, который я собираю, используя Javacsript и используя AJAX для отправки через POST на страницу hook_menu для обработки.

Это может быть столько же времени (или больше), и я отправляю его на страницу создания заказа следующим образом:

<script type="text/javascript">
//...building code
var orderCode = "sku:OR-4x4>qty:2>prc:55.00>nfo:OR-4x4,sku:CVR>qty:1>prc:50>nfo:OR-4x4,sku:PF>qty:15>prc:2>nfo:OR-4x4 (sdfsdfg),sku:EM>qty:2>prc:12.95>nfo:OR-4x4 (sdfsdfg),sku:SC>prc:25>qty:4>nfo:Some description,sku:DB>qty:10>prc:4>nfo:Some description,sku:ES>qty:10>prc:3>nfo:BlahBlah,sku:OR-4x4>qty:2>prc:55.00>nfo:OR-4x4,sku:CVR>qty:1>prc:50>nfo:OR-4x4,sku:PF>qty:15>prc:2>nfo:OR-4x4 (sdfsdfg),sku:EM>qty:2>prc:12.95>nfo:OR-4x4 (sdfsdfg),sku:SC>prc:25>qty:4>nfo:Some description,sku:DB>qty:10>prc:4>nfo:BlahBlah-visiondelimiter-Phasellus laoreet lorem vel dolor tempus vehicula. Curabitur blandit tempus ardua ridiculus sed magna. Quisque placerat facilisis egestas cillum dolore.-visiondelimiter-eventName";

$.ajax({
type: "post",
url: "/create-order/index.php",
data: {
'orderCode': orderCode,
}
})
.done(function( msg ) {
var newpage = '/create-order/index.php';
window.location.replace(newpage);

})

</script>

Я реализовал настройку hook_menu в моем пользовательском модуле под названием «create_order_menu», и он работает отлично. Это создает страницу mysite / create-order. На этой странице есть несколько php, которые должны разбирать строку orderCode на отдельные задачи. Тем не менее, я не могу получить функцию hook_menu для получения переменной _POST. Это не работает:

function mymodule_create_order_menu(){

$orderCode = $_POST['orderCode']; //doesn't work

// do tasks with $orderCode

}

Этого также не происходит, поскольку объявление _POST находится за пределами функции, оно никогда не вызывается при загрузке mysite / create-order:

$orderCode = $_POST['orderCode']; //doesn't work

function mymodule_create_order_menu($orderCode){

// do tasks with $orderCode

}

Нужно ли добавлять какие-либо аргументы в мой модуль hook_menu для передачи на страницу create_order?

function mymodule_menu(){
/**
* Implements hook_menu()
*/
$items['create-order'] = array(
// page title
'title' => 'Create Order',
// function that is called when visiting the new path
'page callback' => 'mymodule_create_order',
'type' => MENU_CALLBACK,
'access callback' => 'user_is_logged_in',
);
return $items;
}

Какой лучший способ передать переменную _POST на мою страницу hook_menu?

0

Решение

Да, вы можете вызвать файл PHP и отправить в него данные с помощью jQuery.ajax ()

Чтобы сделать это, вам нужно обратиться к библиотеке jQuery, из которой работает ваш скрипт.

Затем напишите что-то вроде следующего:

var code = '#12345';

$.ajax({
url: 'create_order_menu.php',
type: 'post',
data: {'ordercode': code},
success: function(data) {
if(data == "received") {
//order code received by PHP script
}
},
error: function(xhr, desc, err) {
console.log(xhr);
console.log("Details: " + desc + "\nError:" + err);
}
});

Этот ajax-вызов отправляет данные JSON в create_order_menu.php и ожидает ответа «полученный», прежде чем продолжить работу с остальным сценарием.

create_order_menu.php может быть так же просто, как

<?php

$orderCode = $_POST['ordercode'];

function createOrderMenu($orderCode){

// do something with $orderCode

return 'received';
}

Этот код здесь не был проверен. Но дело здесь в том, что да, есть альтернативный способ отправки данных в файл PHP, и это было бы лучшим вариантом, чем помещать весь код заказа в URL.

РЕДАКТИРОВАТЬ — Рабочий Пример

<!DOCTYPE html>
<html>
<head>
<script src="//code.jquery.com/jquery-1.11.2.min.js"></script>
</head>
<body>
<input type="button" class="callajax" value="Press">

</body><script type="text/javascript">

var orderCode = '#12345';

$(document).ready(function(){
$('.callajax').on('click', function() { callAjax(orderCode); });
});function callAjax(orderCode){

$.ajax({
url: 'create_order_menu.php',
type: 'post',
data: {'ordercode': orderCode},
success: function(data) {
if(data == "received") {
alert('Order code received.');
}
},
error: function(xhr, desc, err) {
console.log(xhr);
console.log("Details: " + desc + "\nError:" + err);
}
});

}
</script>

</html>

файл create_order_menu.php

<?php

if($_POST['ordercode']){
createOrderMenu($_POST['ordercode']);
}function createOrderMenu($ordercode){
if($ordercode == '#12345'){
echo "received";
}
}

При нажатии на кнопку будет вызван ajax-запрос, отправив наши данные orderCode в create_order_menu.php. Если файл PHP обнаружен и данные POST успешно отправлены, при завершении сценария PHP будет вызвана функция ajax «success» (даже если сценарий PHP выдаст ошибку — которую можно просмотреть в переменной данных для отладки).

В этом случае наше условие if внутри функции успеха будет иметь значение true, и мы увидим предупреждение. Добавьте оператор else и измените код заказа, после чего вы увидите другой результат.

Если скрипт PHP не найден или по какой-то причине данные POST не отправлены, будет вызвана функция error. Вы можете проверить это, переименовав файл PHP и снова нажав кнопку, а затем найдите в консоли ошибку.

Обратите внимание, что во втором фрагменте PHP я теперь получаю «получен», а не возвращаю его, и я вызываю функцию, которую мы определили.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]