Я пытаюсь передать переменную javascript в php-код в файле представления CakePHP 2.
for (id in response) {
var book = response[id];
if (typeof(book.thumbnail_url) != "undefined") {
var x= book.thumbnail_url;
<?php
$file11 = WWW_ROOT . 'img' . DS . 'book_images';
define('DIRECTORY', $file11);
$content = file_get_contents($abc);
file_put_contents(DIRECTORY . '/'.$isbn.'.jpg', $content);
?>
}
}
я пытаюсь передать значение x
в file_get_contents
функция вместо $abc
так что это может сохранить изображение, поступающее с URL-адреса JavaScript соответственно.
РЕДАКТИРОВАТЬ::
for (id in response) {var book = response[id];
if (typeof(book.thumbnail_url) != "undefined") {
var x= book.thumbnail_url;
$.ajax({
type: "POST",
url: '/BookSearchs/test',
data: {'yourX':x}
}).done(function(result) {
alert("yes");
}).fail(function() {
alert("no");
});
}}
Это то, что я написал после реализации полученных ответов. Но каждый раз всплывает «нет». Здесь BookSearchs — мой контроллер, а test — моя функция внутри него.
РЕДАКТИРОВАТЬ 2:
function handleResponse(response) {
var target = '';
for (id in response) {var book = response[id];
if (typeof(book.thumbnail_url) != "undefined") {
var x = book.thumbnail_url;$.ajax({
type: 'POST',
url: "BookSearchs/test",data: {
myVal: x
},
success: function() {
alert('AjaX Success')
},
error: function() {
alert('AjaX Failed')
}
})
.done(function() {
alert('AjaX Done!');
});
}}
return true;
}
В настоящее время это то, что я сделал до сих пор, метод формы не сработал. Это перенаправило меня на другую страницу. В любом случае это мой текущий код. И «тест» это моя функция внутри контроллера, где я хочу получить доступ к myVal
значение с помощью POST. Также у меня есть этот вопрос, мне нужно создать физический файл для теста, чтобы заставить работать функцию ajax, потому что, если я удаляю test.ctp
файл затем Ajax начинает выдавать сообщение об ошибке. Итак, на данный момент я создал физический test.file в BookSearchs
папка в представлении, хотя она и пуста, чтобы заставить работать функцию ajax. Я сомневаюсь, что мой Url
в Ajax неправильно или я не получаю доступ к значениям в контроллере должным образом.
Я не думаю, что это правильный способ сделать это в теории. Но иногда нам это может понадобиться.
Прежде чем мы пойдем по этому пути, вам может понадобиться подумать о других технологиях, таких как NodeJs (например, fs.readFileSync
)
По сути, вы не можете сделать это напрямую. Потому что JavaScript выполняется на стороне клиента, а PHP — на стороне сервера.
Во всяком случае, может быть несколько настроек для этого. Но этот подход может быть медленным и зависит от того, сколько циклов вы делаете.
for (id in response) {
var book = response[id];
if (typeof(book.thumbnail_url) != "undefined") {
var x= book.thumbnail_url;
$.ajax({
type: "POST",
url: '/yourcontroller/route',
data: {'yourX':x}
}).done(function(result) {
//if success, execute other code
}).fail(function() {
//DO other if fail
});
}
}
Затем прочитайте это значение в вашем контроллере
$xValue = $_POST['yourX'];
$file11 = WWW_ROOT . 'img' . DS . 'book_images';
define('DIRECTORY', $file11);
$content = file_get_contents($xValue);
file_put_contents(DIRECTORY . '/'.$isbn.'.jpg', $content);
//do some checking success or fail
//I will assume success
$status = 'success';
echo json_encode(['status'=>$status]);
Обычно я использую трюк, чтобы пройти JS переменная к CakePhp Controller(переменная php). Я создаю form
которые содержат скрытый input
Я также поставлю ссылку на страницу, которая получит переменную php.
.CTP
<?=
$this->Html->link('<i class="fa fa-file-pdf-o"></i>' .__('Export'),
'javascript:myFunction();',
array('escape' => false, 'class' => 'btn btn-app dispatch', 'id' => 'dispatch_packages',
'style'=>'margin-right:0px;background: #f39c12;color:white;',
'disabled' => 'false'));
?>
<form id="sampleForm" name="sampleForm" style="display: none" method="post" action="<?= $this->Url->build([
'controller' => 'YourController',
'action' => 'youraction']) ?>">
<input type="hidden" name="variable" id="variable" value="">
</form>
JS
var jsVar=0;
function myFunction()
{
document.sampleForm.variable.value = jsVar;
document.forms["sampleForm"].submit();
}
Я использовал это с CakePhp 3.x фреймворк & это работает очень хорошо. Вы просто должны написать URL с CakePhp 2.x Синтаксис.
Не стесняйтесь комментировать мой ответ, если у вас возникнут трудности с его применением.
Удачи !