多个AJAX调用-第1次获取数据并转换为JSON对象,第2次更新$ _SESSION信息

时间:2018-07-23 08:52:18

标签: php jquery ajax

我有一个ajax调用,该调用从表中提取数据,然后转换为JSON对象

因为我也在PHP上做很多事情,所以我需要进行第二次AJAX调用 在第一个将更新$ _SESSION信息之后 我尝试过

$_SESSION['company_id'] = $_POST['companyid'];

在处理第一个AJAX调用的同一文件中,但是它不处理来自第一个调用的数据,因此我需要执行第二个调用

这是我的第一个和第二个AJAX查询的jQuery代码

$(".showcompinfo").click(function(){
        $("#comptable").hide();
        $("#showcomptable").show();
            var id = $(this).attr('id');
            $("#comp_info").toggle();
            var companyid = id;
            var dataString = "companyid="+companyid;
            $.ajax({ /* THEN THE AJAX CALL */
                type: "POST", 
                url: "../inc/dataforms/complist.php", 
                data: dataString, 
                success: function(result){
                    var jsonObject = JSON.parse(result);
                    // here you can do your magic
                    var approved = jsonObject.customer_approved;
                    $("#showcompname").text(jsonObject.name);
                    // Get Reg Address Details - Check if any field is empty
                    var regoffice_2 = '';
                    var regoffice_3 = '';
                    var regoffice_city = '';
                    console.log(jsonObject.regoffice_city);

                    if(jsonObject.regoffice_2)
                    { 
                        regoffice_2 = ', ' + jsonObject.regoffice_2;
                    };

                    if(jsonObject.regoffice_3)
                    { 
                        regoffice_3 = ', ' + jsonObject.regoffice_3;
                    };

                    if(jsonObject.regoffice_city)
                    { 
                    var regoffice_city = ', ' + jsonObject.regoffice_city;
                    };
                    var addlne1 = jsonObject.regoffice_1;
                    var regaddress = jsonObject.regoffice_1 + regoffice_2 + regoffice_3 + regoffice_city;
                    $("#addline1").val(jsonObject.regoffice_1);
                    $("#addline2").val(jsonObject.regoffice_2);
                    $("#addline3").val(jsonObject.regoffice_3);
                    $("#addcity").val(jsonObject.regoffice_city);
                    $("#addcounty").val(jsonObject.regoffice_county);
                    $("#countryselected").val(jsonObject.regoffice_country);
                    $("#countryselected").text(jsonObject.regoffice_country);
                    $("#addpostcode").val(jsonObject.regoffice_postcode);

                    console.log(regaddress);
                    if(approved == '1')
                    {
                        $("#approvedcust").text('Yes');
                    } else {
                        $("#approvedcust").text('Customer but Not Approved');
                    };

                }
            }); 
            // 2nd Ajax 
            var companyid2 = jsonObject.company_id;
            var dataString2 = "companyid="+companyid2; 
            $.ajax({ /* THEN THE AJAX CALL */
                type: "POST", 
                url: "../inc/updatesession.php", 
                data: dataString2, 
                success: function(){    
        }
        }); 
    //

这是complist.php的PHP代码

if(!empty($_POST['companyid'])) 
{
$companyid = $_POST['companyid'];
$query = mysqli_query($dbc,"SELECT * FROM `comp_companies` WHERE `company_id` = '$companyid'");
$result = mysqli_fetch_assoc($query);
if($result){
$newdata = json_encode($result);
}
}
print_r($newdata);

如果有人可以帮助甚至将其合并为1个ajax查询或帮助我接到2个电话 工作正常,将不胜感激

**编辑** 好的,我现在在会话变量中显示公司ID,但是当用户单击查看其他公司信息结果时,会话company_id不会更新 我已经将complist.php更改为以下

if(!empty($_POST['companyid'])) 
{
unset($_SESSION['company_id']);
$companyid = $_POST['companyid'];
$query = mysqli_query($dbc,"SELECT * FROM `comp_companies` WHERE `company_id` = '$companyid'");
$result = mysqli_fetch_assoc($query);
if($result){
$_SESSION['company_id'] = $_POST['companyid'];
$newdata = json_encode($result);
}
}
print_r($newdata);

我在上面的想法是,一旦进行了ajax调用,它将立即取消会话变量公司信息的设置 然后一旦找到所选公司的结果,它将使用新值重置会话var company_id,但是不会更新会话变量

显示我的意思的屏幕截图 enter image description here

enter image description here

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

您的代码成功更新了会话变量。但是,由于要进行AJAX调用,因此仅在服务器上执行由AJAX直接调用的PHP脚本中的代码(在这种情况下为“ complist.php”)。最初用于创建页面的PHP代码均不会再次运行-这就是为什么必须使用JavaScript填充其余新选择的公司详细信息的原因。

要在AJAX调用后更新屏幕上的ID,您需要做的就是遵循用于更新其余字段的模式

更改您的HTML,以便包含公司ID的元素具有可以让JavaScript识别的ID:

<span id="showcompname"></span><span id="showcompid"><?php echo $_SESSION['company_id'];?></span>

然后在AJAX代码的“成功”回调中,编写

$("#showcompid").text(jsonObject.company_id);

这与您获得的其他JavaScript代码完全一样。更新“ showcompname”元素。

与此同时,下次运行运行更新整个页面的PHP代码(例如通过刷新页面)时,将使用存储在PHP会话中的值。