【问题标题】:Refreshing the contents of a DIV tag, which includes a PHP function call刷新 DIV 标记的内容,其中包括 PHP 函数调用
【发布时间】:2012-12-17 03:28:18
【问题描述】:

问题的核心是我试图使用 HTML 下拉菜单的值来调用 php 函数,而无需重新加载整个页面。鉴于 PHP 是一种服务器端语言,我已合并 JQuery 来处理 onChange 事件,希望只重新加载页面的一部分。我要调用的 PHP 函数(即 wp_cart-button_for_product)打印出添加到购物车按钮,但与添加到购物车按钮相关的变量最终取决于下拉菜单。我要重新加载的 div 标签(即按钮重新加载)在当前页面上,但 URL 会根据产品而变化。我已经尝试过 load 和 html 方法,但没有运气。

<script type = "text/javascript">
  function productchange() 
  {
      var currentrow = $('#productcategory1').val();
      $("#jsvar").val(currentrow);
      $.ajax({
        type: "GET",
        url: "http://www.example.com/wp-content/themes/themeX/storevar.php",
        data: {'jsvar': currentrow},
        complete: function(){
              $('#button-reload').load("http://www.example.com/wp-content/themes/themeX/printbutton.php #button-reload > *");
      //      $('#button-reload').html($('#button-reload',data).html);
      //      $('#button-reload').load(location.href "#button-reload > *");
            }});      
      return false;
  }
  </script>

<div id = "button-reload">
      <?php echo print_wp_cart_button_for_product($products[$_SESSION['currentrow']]["Product"], $products[$_SESSION['currentrow']]["Price"]); ?>
  </div>

  <form method="get" action="http://www.example.com/wp-content/themes/themeX/storevar.php">
      <input type="hidden" name="jsvar" id="jsvar" value="" />
  </form>

Storevar.php

<?php
    session_start();
    $currentrow = $_GET['jsvar'];
    echo "Current Row = $currentrow";
    $_SESSION['currentrow'] = $currentrow;
    echo "Session Currentrow =".$_SESSION['currentrow'];
?>

打印按钮.php

<div id="button-reload">
    <?php echo print_wp_cart_button_for_product($products[$_SESSION['currentrow']]["Product"], $products[$_SESSION['currentrow']]["Price"]); ?>
</div>

【问题讨论】:

    标签: php jquery html reload


    【解决方案1】:
    function productchange() 
    {
    var currentrow = $('#productcategory1').val();
    $('#button-reload').load("http://www.example.com/wp-content/themes/themeX/printbutton.php", {jsvar: currentrow});
    }
    

    应该够了。

    您正在执行一个 ajax 请求,然后在成功回调中调用 load。查看jquery文档http://api.jquery.com/load/

    编辑您缺少“session_start();”在您的 printbutton.php 中。您也可以在其中添加您的存储代码,这样您只需要进行一次 ajax 调用。

    打印按钮.php

    <?php
        session_start();
        $currentrow = $_GET['jsvar'];
        echo "Current Row = $currentrow";
        $_SESSION['currentrow'] = $currentrow;
    ?>
    <div id="button-reload">
        <?php echo print_wp_cart_button_for_product($products[$_SESSION['currentrow']]["Product"], $products[$_SESSION['currentrow']]["Price"]); ?>
    </div>
    

    【讨论】:

    • 我感觉我的代码在某种程度上是多余的。不幸的是,这个改变并没有解决我的问题,因为 print_wp_cart_button_for_product 仍然没有被当前变量调用。还有其他想法吗?
    • 添加了 session_start(),我认为我不需要它,因为我只是将 printbutton.php 中的 button-reload div 标签加载到主页的 button-reload div 标签中。但是仍然无法正常工作。
    • @panoramic - 详细说明“不起作用”您是遇到 PHP 错误还是只是没有返回您想要的产品?您可以使用像 Firebug 这样的浏览器插件来检查 ajax 调用的结果。
    • 抱歉LastCoder不清楚。使用 Firebug Web 控制台时,我看到在我更改下拉菜单上的选择时执行了 POST example.com/wp-content/themes/themeX/printbutton.php。问题是没有使用正确的变量 ($_Session['currentrow']) 调用添加到购物车按钮。项目名称保持空白,价格设置为 $0,这意味着 $_Session['currentrow'] 保持未初始化。
    • @panoramic - 您的响应应该是与 $currentrow GET 参数的纯文本值相呼应,您是说它也是空白还是未定义?
    【解决方案2】:

    经过数小时的实验:

     <script type = "text/javascript">
     function productchange() 
      {
          var currentrow = $('#productcategory1').val();
          alert(currentrow);
          $("#jsvar").val(currentrow);
          $.ajax({
             type: "GET",
             url: "http://example.com/wp-content/themes/themeX/storevar.php",
             data: {'jsvar': currentrow},
             success: function(response){
                  alert(response);
                  var pathname = window.location.href;
                  alert(pathname);
                  $('#button-reload').load(pathname + " #button-reload", function(responseTxt, statusTxt, xhr){
                  if(statusTxt=="success")
                    alert("Content loaded successfully!");
                    if(statusTxt=="error")
                      alert("Error: "+xhr.status+": "+xhr.statusTxt);
                      });
      return false;
      }
      </script>
    

    【讨论】:

      猜你喜欢
      • 2012-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-23
      • 2012-09-16
      • 2011-03-10
      • 1970-01-01
      相关资源
      最近更新 更多