AJAX没有将值传递给PHP

时间:2016-06-05 00:04:28

标签: javascript php jquery ajax session

当使用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;
  }

我在论坛上搜索了几个小时没有成功。所有解决方案似乎都不适用于“变更”的使用。选择列表。

有人可以帮忙吗?谢谢。

3 个答案:

答案 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 " . $langecho php不是<select>元素的有效子元素。

请参阅<select>

  

允许的内容零个或多个<option><optgroup>元素。

答案 2 :(得分:-1)

如果您将数据发送为“正文”,则可以在下面进行处理;

if (!is_array($_POST) || (count($_POST) < 1)) {
    $_POST = json_decode(file_get_contents('php://input'), true);
}