【问题标题】:Redirect with PHP after ajax callajax 调用后使用 PHP 重定向
【发布时间】:2014-07-11 12:36:44
【问题描述】:

我正在执行以下 ajax 调用:

$('#save_sale').click(function() {
    var save_sale = 1;
    $.ajax({
        type: 'GET',
        url: 'summary.php',
        data: {save_sale: save_sale},
        success: function(data) { /* Do something here?? */ },
        error: function(xhr, ajaxOptions, thrownerror) { }
    });
});

这是我的 PHP:

function createSale()
    {

        if($sale_id = $this->link->inQuery("INSERT INTO nya_forsaljningar(personnr, status, datum) VALUES('".$this->personnr."','".$this->status."','".$this->sale_date."')"))
        {
            $this->link->inQuery("UPDATE services_temp SET active=1 WHERE temppdtls='".$this->personnr."'");
            $this->link->inQuery("UPDATE summary_temp SET active=1 WHERE personnr='".$this->personnr."'");

            header("Location: addcust.php?new_sale=$sale_id");
            exit;
        }
        else
        {
            return false;   //Kunde inte skapa försäljningen
        }
    }

if(isset($_GET['save_sale']))
{
    $sale_date = date('Y-m-d');         //Datumet då man skapar försäljning
    $personnr = $_SESSION['fil'][3];    //Personnummer på personen, använder detta för att ta fram de olika delarna från tabellerna
    $save_true = $_GET['save_sale'];    //Försäkrar oss av att vi ska hantera en uppläggning av en nyförsäljning

    $new_sale = new newSale($personnr, $sale_date, $save_true, $link, $status='Obehandlad');    //Skapar ett objekt av försäljningen som vi använder för att hantera den nya försäljning, kolla om den är ok, skapar kundbilden, nekar osv.
    if($new_sale->checkService())
    {
        $new_sale->createSale();    //Skapar försäljningen
    }
    else 
    {
        echo "Kunde inte skapa försäljningen";
        exit;
    }
}

创建销售后,我想重定向到 addcust.php?new_sale=$sale_id

我怎样才能做到这一点?

【问题讨论】:

  • window.location.href="NEW_URL_HERE.PHP"替换/* Do something here?? */

标签: php jquery ajax redirect


【解决方案1】:

在你的 js 页面上

 $.ajax({
        type: 'GET',
        url: 'summary.php',
        data: {save_sale: save_sale},
        //success: function(data) { /* Do something here?? */ },
        error: function(xhr, ajaxOptions, thrownerror) { }
    }).success(function(data) {
       window.location('addcust.php?new_sale='+data.id)
    });

在你的 php 脚本中回显 id

$data['id'] = <sale_id>;
echo json_encode($data);exit

希望它会起作用。

【讨论】:

  • 为什么要使用两个成功回调函数?
  • ajax调用成功时执行
【解决方案2】:

如果要进行完全重定向,可以在成功回调中使用 window.location = 'addcust.php?new_sale='+youridvariable

【讨论】:

    【解决方案3】:

    你重定向成功:

    $('#save_sale').click(function() {
        var save_sale = 1;
        $.ajax({
            type: 'GET',
            url: 'summary.php',
            data: {save_sale: save_sale},
            success: function(data) { 
                    window.location.href = 'addcust.php?new_sale=' + data
                },
            error: function(xhr, ajaxOptions, thrownerror) { }
        });
    });
    

    无论您从 PHP 脚本返回什么内容,都将在 data 中。所以回显$sale_id,你就会得到你的网址。

    【讨论】:

    • 变量data的php端呢
    • @Styphon:如何从我的班级返回具有正确 ID 的变量数据?
    【解决方案4】:

    如果销售成功,则通过 echo 从您的 PHP 文件中返回 $sale_id(假设 $new_sale->id 将返回一个 id):

    if($new_sale->checkService())
    {
        $new_sale->createSale();    //Skapar försäljningen
        echo $new_sale->id();
    }
    

    然后在您的响应数据中检索它并将其添加到您的重定向中:

    success: function (data) {
        window.open("addcust.php?new_sale="+data, "_top");
    },
    

    这是一个使用我不确定是否存在的变量的示例,因为我不知道您的课程是如何工作的。但是,逻辑保持不变。

    哦,还有瑞典人的拳头。

    【讨论】:

      【解决方案5】:

      您可以在成功处理程序中使用 JavaScript 重定向:

      success: function(data) { 
          window.location = 'newpage.php';
      },
      

      不能通过 PHP 重定向来完成,因为这只会重定向 ajax 调用,而不是原始浏览器窗口。

      如果您想在 URL 中使用销售 ID,则需要将其输出以便可以访问:

      $saleId = $new_sale->id; // or however you get the sale ID
      echo json_encode(array('saleId' => $saleId)); // output JSON containing the sale ID
      

      阿贾克斯:

      $.ajax({
          type: 'GET',
          url: 'summary.php',
          dataType : 'json', // tell jQuery to parse the response JSON
          data: {save_sale: save_sale},
          success: function(data) {
              window.location = 'addcust.php?new_sale=' + encodeURIComponent(data.saleId);
          },
          error: function(xhr, ajaxOptions, thrownerror) { }
      });
      

      【讨论】:

      • 足够的编辑让我的浏览器标签闪烁。尽管如此,适当的回应。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-20
      • 2013-08-08
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多