我从jv的envato市场购买了modalbox插件,我想用它来实现我的类别>子类别>项目。无论如何我知道JavaScript变量可以使用php分配一个值但是我需要相反。
在我的第一步中,我让用户使用基本链接选择一个类别,然后onclick甚至将它们带到第二张幻灯片,我想显示子类别和与此类别相关的项目。
我尝试了两件事:
1) setting onClick = "step2();<?php $chosen_cat = ' . $this->db->escape(trim($category)) . '?>"
希望我可以简单地将所选类别的名称分配给一个值,然后在step2()javascript方法中使用$ chosen_cat来显示产品,但这会破坏javascript,因为输出中存在冲突;
2)我将step2()更改为step2(类别)然后使用, 的onclick = “步骤2(DB-&GT;逃逸($类););”这传递了 值为step2()方法然而现在我需要调用&lt; - 我需要打印出来 那个字符串到PHP然而我不知道如何解决这个问题 考虑PHP - &gt; JS作为客户关系的服务器是可行的,但是 背面..
$ this-&gt; db-&gt; escape()是一个http://codeigniter.com/user_guide/database/queries.html codeigniter方法。
我的代码:
<script type="text/javascript">
function step1() {
modalbox.show(new Element("div").insert(
new Element("p", { "align": "justify" }).insert(
<?php
$categories = $items;
$chosen_cat = '';
?>
<?php
$i = 0;
foreach($categories as $category => $itemarray) {
$i++;
if($i==27){
echo $this->db->escape('<a class="category" onclick="step2();<?php $chosen_cat = ' . $this->db->escape(trim($category)) . '?>" href="#">'. trim($category) . '</a>');
}
else {
echo $this->db->escape('<a class="category" onclick="step2();" href="#">' . trim($category) . '</a>') . '+';
}
}
?>
)
), {
"title" : "Step 1/3",
"width" : 800,
"options" : [{
"label" : "Next »",
"onClick" : step2
}]
});
};
function step2() {
alert(<?php $this->db->escape($chosen_cat); ?>);
modalbox.show([ new Element("div").insert(
new Element("p", { "align": "justify" }).insert(
"If you open a modalbox when another one is opened, it will stretch to the new " +
"modalbox width and height and overwrite the content.<br /\><br /\>" +
"You can use HTML or Prototype Elements like a DIV or a TABLE."
)
),
new Element("p", { "align": "justify" }).insert(
"You can have multiple contents on a single modalbox by using an array like this:<br /\><br /\>" +
"<pre>modalbox.show([ content1, content2, ... ], options);</pre>"
)
], {
"title" : "Step 2/3",
"width" : 800,
"options" : [{
"label" : "« Previous",
"onClick" : step1
}, {
"label" : "Next »",
"onClick" : step3
}]
});
};
function step3() {
modalbox.show([ new Element("div").insert(
new Element("p", { "align": "justify" }).insert(
"If you open a modalbox when another one is opened, it will stretch to the new " +
"modalbox width and height and overwrite the content.<br /\><br /\>" +
"You can use HTML or Prototype Elements like a DIV or a TABLE."
)
),
new Element("p", { "align": "justify" }).insert(
"You can have multiple contents on a single modalbox by using an array like this:<br /\><br /\>" +
"<pre>modalbox.show([ content1, content2, ... ], options);</pre>"
)
], {
"title" : "Step 3/3",
"width" : 800,
"hideOnPageClick": false,
"options" : [{
"label" : "« Previous",
"onClick" : step2
}, {
"label" : "Finish",
"isDefault" : true,
"onClick" : modalbox.hide
}]
});
};
</script>
是否可以在onclick事件中设置一个带有JavaScript的会话变量,在js样式中说$ _SESSION ['category'] ='category'然后用php读取该会话并取消设置它我不认为这会创建很多一个安全问题,因为会话将存在不到一秒钟。
答案 0 :(得分:6)
JavaScript永远不会设置PHP变量。 JavaScript在客户端上运行,在服务器上运行PHP。如果您需要从JS更改服务器上的内容,则必须使用AJAX,或发送常规HTTP请求。
或者,您可以让PHP在客户端上生成运行时所需的数据,通常是通过打印一些JSON来成为JS变量
在您的示例中,您需要类似以下内容(为简单起见,我将使用jQuery)
... onclick="$.ajax('/category.php').done(function(data) {step2(data.category);})"
如果它不是HTML中的JS
那会更好$('#my-button').click(function(){
$.ajax('/category.php').done(function(data) {
step2(data.category);
});
});
我不能给你一个AJAX教程,但主要的是当你需要来自服务器的数据时你会发出一个AJAX请求。