当使用select选项时,我正在使用Ajax自动更新$ _SESSION值。具体来说,如果用户从下拉列表中选择语言,则必须更新$ _SESSION ['语言']。我的实现没有发生这种情况,但我没有看到原因。
1)选择:
<select id="lang" name="lang">
<option value="en" data-reactid=".1.$en">English</option>
<option value="es" data-reactid=".1.$es">Español</option>
<option value="it" data-reactid=".1.$it">Italiano</option>
<option value="sv" data-reactid=".1.$sv">Svenska</option>
</select>
2)lang传递给js和Ajax(post_language.js):
$(document).ready(function() {
$('#lang').change(function() {
var language_selection = $(this).val();
$.ajax({
type: 'POST',
url: '../includes/ajax/language_ajax.php',
data: {lang: language_selection},
success:function(data){
alert('This was sent back: ' + language_selection);
$('#lang').html(data);
},
error:function(msg){
console.log('error: '+msg);}
});
});
});
此时,ALERT消息正确显示,但是,&#39; lang&#39;永远不会从url:language_ajax.php中回显$ _SESSION。事实上,这个网址甚至从未被ajax调用过。
3)language_ajax.php
if(isset($_POST['lang'])){
$lang = $_POST['lang'];
echo "Language " . $lang;
}
我在论坛上搜索了几个小时没有成功。所有解决方案似乎都不适用于“变更”的使用。选择列表。
有人可以帮忙吗?谢谢。
答案 0 :(得分:0)
这是整个language_ajax.php脚本吗?如果是这样,你没有添加任何语句来更新$ _SESSION ['language']值...例如:
if(isset($_POST['lang'])){
$lang = $_POST['lang'];
session_start();//Initialise Session
$_SESSION['language'] = $lang;
echo "Language " . $lang;
}
如果你说PHP脚本从未到过,那JS中的“成功”肯定不会运行吗?
另外,正如其他人所说,'$('#lang')。html(data)'对于SELECT元素完全无效。但是,没有必要更新SELECT值,因为它刚刚被用户更新...
答案 1 :(得分:0)
来自data
的文字节点"Language " . $lang
:echo
php
不是<select>
元素的有效子元素。
请参阅<select>
允许的内容零个或多个
<option>
或<optgroup>
元素。
答案 2 :(得分:-1)
如果您将数据发送为“正文”,则可以在下面进行处理;
if (!is_array($_POST) || (count($_POST) < 1)) {
$_POST = json_decode(file_get_contents('php://input'), true);
}