首页 > 解决方案 > 多个 AJAX 调用 - 第一次获取数据并转换为 JSON 对象,第二次更新 $_SESSION 信息

问题描述

我有一个 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,但是它不会更新会话变量

显示我的意思的屏幕截图 在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

标签: phpjqueryajax

解决方案


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

要在 AJAX 调用之后更新屏幕上的 ID,您需要做的就是按照您用来更新其余字段的模式

更改您的 HTML,使包含公司 ID 的元素具有一个 ID,让 JavaScript 识别它:

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

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

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

这与您获得的其他 JavaScript 代码的概念完全相同,例如更新“showcompname”元素。

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


推荐阅读