我有一个主页面,您可以在其中填写一些数据。单击链接“创建”后,它将调用ajax将新记录插入mysql数据库(使用主页中的数据)。我正在插入这条新记录的mysql表有一个auto_increment主键,我需要知道“create”链接重定向的页面上的这个键。因此,为了在简短的示例中显示它,我有类似的东西:
index.php有一个链接Create index.php还有这个jquery $(“#create”)。click($。ajax({url:“create.php”,cache:false,data:{... index.php中的一些数据......} }));
create.php将记录插入数据库,然后执行此操作$ _SESSION [“id”] = mysql_insert_id();
new.php需要从$ _SESSION [“id”]
获取此ID当我尝试在点击事件之外调用ajax(插入记录)时(所以在主页加载之后立即),在我实际点击链接之前它完美地运行了。然而,这种方式有点随机。有时它有时它没有,它从来没有在谷歌Chrome这种方式工作......
我在文档的开头正确使用了session_start(),所以没有问题。
非常感谢你在这方面遇到的任何帮助,最后我发现问题来自于点击事件中的这个ajax调用位置,但我不知道如何修复它。我想我错过了一些关于页面重定向和点击事件与ajax一起工作的知识。
答案 0 :(得分:0)
首先,您的会话必须在index.php页面中启动,因此new.php和create.php将在会话cookie中接收会话ID。理论上你可以调用$ .ajax然后在它之后改变窗口位置。但是,这并不能保证你将create.php作为完成执行(即创建了你想要的行并将你想要的数据插入到应该存储在数据库中的会话中)。这可能会导致您遇到的竞争状况。
要解决此问题,您只需在Ajax调用成功函数中更改窗口URL,如:
$("#create").click($.ajax({ url: "create.php", cache: false, data: { ... some data from index.php ... }, success: function() { window.location = 'new.php'; } }));