【问题标题】:Updating PHP session variable using jQuery Ajax使用 jQuery Ajax 更新 PHP 会话变量
【发布时间】:2013-05-24 23:20:07
【问题描述】:

我知道这个问题已被多次回答,但我无法找到一个专门解决我的问题的问题。 我正在制作一个网站,用户可以使用 eBay API 出售他们的 eBay 商品(这有点痛苦!)。我的问题在于结果的分页:我需要一种更新$_SESSION 页码变量的方法,以便页面重新加载并显示不同的结果页面。我正在使用 AJAX 进行此操作,这是我第一次使用它。

流程如下:

1) 用户点击页面底部的一个分页链接(例如您的 Google 结果底部的内容),我将其制作成一个带有隐藏字段的表单,该字段存储下一个页码,当用户点击。

2)使用AJAX更新外部页面上的$_SESSION变量(无需刷新!)

3)重新加载页面并显示相应的结果页面。

问题似乎在第 2 步和第 3 步之间。我使用的代码位:

设置 $_SESSION 变量

 <?php
  session_start();
  if(!isset($_SESSION['pageNumber']))
  {
    $_SESSION['pageNumber'] = "1";
    echo("Session value NOT set, pageNumber = " . $_SESSION['pageNumber']);
  }
  else
  {
    echo("Session value SET, pageNumber = " . $_SESSION['pageNumber']);
  }
?>

分页

<form action="">
<div id="pagination" style="text-align:center; <?php if($totalPages == 1) echo('display:none;');?>">
  <?php
    global $totalPages;
    if(intval($_SESSION['pageNumber']) != 1)
    {
      print("<a href=\"\" onclick=\"updatePageNumber(-1);\">Previous Page</a>");
    }
    for($i = 1; $i <= $totalPages; $i++)
    {
      print("<a href=\"\" onclick=\"updatePageNumber('$i');\">$i</a>");
      print("&nbsp;&nbsp;&nbsp;");
    }
    if(intval($_SESSION['pageNumber']) != $totalPages)
    {
      print("<a href=\"\" onclick=\"updatePageNumber(0);\">Next Page</a>");
    }
  ?>
</div>
<input type="hidden" name="nextPageNumber" id="nextPageNumber" value="<?php echo($_SESSION['pageNumber']);?>">
</form>

更新隐藏字段和 $_SESSION 值

function updatePageNumber(newNumber)
{
  //Update hidden field
  if(newNumber == -1)
  {
    var num = document.getElementById('nextPageNumber').value;
    num--;
    document.getElementById('nextPageNumber').value = num;
  }
  else if(newNumber == 0)
  {
    var num = document.getElementById('nextPageNumber').value;
    num++;
    document.getElementById('nextPageNumber').value = num;
  }
  else
  {
    document.getElementById('nextPageNumber').value = newNumber;
  }

  //Update $_SESSION value with AJAX
  var dataString = 'nextPageNumber='+ document.getElementById('nextPageNumber').value;  
  $.ajax(
  {  
    url: "scripts/updatePageNumber.php", 
    type: "POST",
    data: dataString,
    dataType: "text",
    success: function(text)
    {
      alert("Done! Response: " + text);
    }

});

还有 PHP 文件

<?php
if (isset($_POST['nextPageNumber']))
{
    session_start();
    die("Made it this far!");
    $nextPageNumber = $_POST['nextPageNumber'];
    $_SESSION['pageNumber'] = $nextPageNumber;
    echo $nextPageNumber;
}
?>

注意:我没有得到PHP文件的die()方法,也没有得到AJAX成功的警报(顺便问一下,那是如何正确获取响应文本?)

非常感谢任何帮助,我已经被困了很长时间了!

【问题讨论】:

    标签: php jquery ajax


    【解决方案1】:

    您的 ajax 调用在其数据中没有 nextPageNumber,因此您的 PHP 脚本(不在 $_POST 数组中)看不到它,您的测试失败。

    (作为一般性评论,您的问题涉及太多工作部分,这使得它不适合这样的网站,致力于帮助其他有类似问题的人。下次请隔离导致代码的部分问题。这可能就是为什么您还没有其他答案的原因 - 人们在尝试帮助解决如此全面的问题时厌倦了被否决。)

    【讨论】:

    • 太棒了!我怎么能解决这个问题?顺便说一句,感谢您的回复,我知道这个问题真的很长,但我不能 100% 确定问题可能出在哪里,所以我只是把所有可能的部分都放了。下次我想我会在需要时放置部分代码,而不是一次全部放置!
    • 完全不知道?我一直在尝试大约五种不同的方法,包括使用GET 而不是POST,但仍然没有用。
    • 您的 dataString 不包含 nextPageNumber。试试var dataString = {"nextPageNumber":$("#nextPageNumber").val()}
    猜你喜欢
    • 2016-12-23
    • 1970-01-01
    • 2013-10-25
    • 2019-06-09
    • 2013-02-09
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 2014-07-11
    相关资源
    最近更新 更多