将变量发送到PHP页面并在新选项卡中打开页面

时间:2016-05-05 13:08:58

标签: php jquery ajax

我有这段代码

$(document).on('click', '#button', function(){
    var my_data = 'Test Test Tes';

    $.ajax({
      type: "POST",
      url: "preview.php",
      data: "my_data=" + my_data,
      success: function() {
        window.open('preview.php');
      },
    });
  });

以上代码打开preview.php,但我收到此错误 -

  

注意:未定义的索引:my_data in   第3行的C:\ xampp \ htdocs \ tb-builder \ preview.php

这就是我preview.php -

中的内容
<?php
    $data= $_POST['my_data'];
    echo $data;
?>

有人可以帮我解决这个问题吗?感谢

6 个答案:

答案 0 :(得分:2)

  

主要错误是window.open('preview.php');加载页面preview.php,    
使用时加载post/get请求时,您不会发送任何数据   window.open('preview.php');,您期待$_POST['my_data']

的价值
  $(document).on('click', '#button', function(){
    var my_data = 'Test Test Tes';

    $.ajax({
      type: "POST",
      url: "preview.php",
      data: "my_data=" + my_data,
    });
  });

<强> preview.php

<?php
    if(isset($_POST['my_data']){
    $data= $_POST['my_data'];
    header('location:preview.php?my_data=$data');  //reload preview.php with the `my_data`
   }
   if(isset($_GET['my_data'])){
      $data=$_GET['my_data'];    
    echo $data;             //display `my_data` as you requested
   }
?>

更新

  

不使用ajax,实现你所需要的。

$(document).on('click', '#button', function(){
    var my_data = 'Test Test Tes';
        window.open('preview.php?my_data='+my_data);
  });

<强> preview.php

<?php 
 if(isset($_GET['my_data'])){
        $data=$_GET['my_data'];    
        echo $data;          
 }
?>

<小时/>

最终更新


  

实际上你根本不需要ajax,因为你要去另一个包含数据的页面。


以避免get请求

  

button包含在隐藏forminput的{​​{1}}内   my_data并设置action="preview.php" ,如下所示

<form action="preview.php" method="post">
  <input type="hidden" id="my_data" value="Test Test Tes">
  <button type="submit" id="button">post</button>
</form>

答案 1 :(得分:0)

window.open只需创建一个新的window对象。那个窗口没有$_POST个全局变量。使用window.open('preview.php?my_data=' + my_data);并在PHP中使用$_GET['my_data']

该帖子与ajax有关,不适用于新窗口。

修改

好的伙计们,我看到这里有点混乱。

  

以上代码打开 preview.php,但我收到此错误 -

那会发生什么?

OP正在向my_data发送名为preview.php的数据。此数据通过$_POST传递到preview.php。此时,有$_POST['my_data'];

成功完成后,ajax调用,然后window.open打开新窗口,没有$_POST数据,这就是OP收到此错误消息的原因

如果他想使用他在my_data中发布的相同数据,那么他需要将其添加到网址并使用$_GET

我认为被误解的是@HoangHieu所写的内容,我指出:

  

是肯定的。在新窗口 - Xahed Kamal

如果您想使用响应,请使用

success: function(reponse) {
   window.open('preview.php?my_data=' + response);
},

然后在窗口中使用$_GET['my_data']

答案 2 :(得分:0)

使用

if (isset($_POST['my_data']))    
{    
    $data= $_POST['my_data'];
    echo $data; 
}   

答案 3 :(得分:0)

请使用以下内容更改您的preview.php代码: -

<?php
    if (isset($_POST['my_data']))
    {
       $data= $_POST['my_data'];
       echo $data;
    }
?>

它可能对你有帮助。

答案 4 :(得分:0)

中已完成的问题

你的错误在新窗口? - HoangHieu 1分钟前

是。在新窗口中 - Xahed Kamal

第一个Ajax发布它完成成功:函数调用...在新窗口中你没有任何发布数据,我不知道任何解决方案通过javascript将数据发布到新窗口。 。只能通过 GET 请求发送数据..

答案 5 :(得分:-1)

你的构造:

data: "my_data=" + my_data,

错了。它应该是:

data: {my_data: $my_data},

我将你的JS变量变换为$my_data,所以它不那么令人困惑。