繁体   English   中英

使用AJAX将PHP变量转换为JS变量

[英]PHP variable to JS variable using AJAX

我正在尝试将PHP变量转换为JS变量,以便可以在自己制作的游戏中使用它。 当我检查地图代码时,它只是undefined 提前致谢。 仅供参考,PHP有效。

<script>
    var mapCode;
    var used;
    var active;

    function downloadCode() {
        $.ajax({
            type: 'GET',
            url: 'getMapCode.php',
            data: {
                mapCode: $mapCode,
                used: $used,
                active: $active,
            },
            dataType: "text",
        }); 
    }
</script>
<?php
  ini_set('display_errors', 1); 
  error_reporting(E_ALL);
  $servername = "localhost";
  $username = "username";
  $password = "password";
  $dbname = "database";

  // Create connection
  $conn = mysqli_connect($servername, $username, $password);
  mysqli_select_db($conn, $dbname);

  // Check connection
  if (!$conn) 
  {
    die("Connection failed: " . mysqli_connect_error());
  }
  // echo "Connected successfully";

  $query = "SELECT mapCode FROM mapCodes";
  $result = mysqli_query($conn, $query);
  $mapCode = mysqli_fetch_row($result);

  $query1 = "SELECT used FROM mapCodes";
  $result1 = mysqli_query($conn, $query1);
  $used = mysqli_fetch_row($result1);

  $query2 = "SELECT active FROM mapCodes";
  $result2 = mysqli_query($conn, $query2);
  $active = mysqli_fetch_row($result2);

  mysqli_close($conn);  
?>

我了解PHP代码很丑陋,但是可以正常工作,当整个事情都可以正常工作时,我将在稍后进行“修饰”

如果文件扩展名是.php而不是.js则应该可以

<script>
    function downloadCode() {
        $.ajax({
            type: 'GET',
            url: 'getMapCode.php',
            data: {
                mapCode: "<?php echo $mapCode; ?>",
                used: "<?php echo $used; ?>",
                active: "<?php echo $active; ?>",
            },
            dataType: "text",
        });
    }
</script>

如果您有.js文件,则在将js包含在.php文件中之前声明javascript变量

<script>
    var mapCode = "<?php echo $mapCode; ?>";
    var used = "<?php echo $used; ?>";
    var active = "<?php echo $active; ?>";
</script>

然后在.js文件中,您将轻松获得

<script>
    function downloadCode() {
        $.ajax({
            type: 'GET',
            url: 'getMapCode.php',
            data: {
                mapCode: mapCode,
                used: used,
                active: active,
            },
            dataType: "text",
        });
    }
</script>

您只需要使用<?php echo $ mapCode;?>代替$ mapCode。 ....没有打开Php标签就无法修改php变量

我当前的项目实际上正在处理许多ajax调用,这是我用来与服务器通信的简化版本:

// php
// needed functions
function JSONE(array $array)
{
    $json_str = json_encode( $array, JSON_NUMERIC_CHECK );
    if (json_last_error() == JSON_ERROR_NONE)
    {
        return $json_str;
    }
    throw new Exception(__FUNCTION__.': bad $array.');
}
function output_array_as_json(array $array)
{
    if (headers_sent()) throw new Exception(__FUNCTION__.': headers already sent.');
    header('Content-Type: application/json');
    print JSONE($array);
    exit();
}

// pack all data
$json_output = array(
    'mapCode'   => $mapCode,
    'used'      => $used,
    'active'    => $active
);

// output/exit
output_array_as_json( $json_output );


// javascript
function _fetch()
{
    return $.ajax({
        url: 'getMapCode.php', // url copied from yours
        type: 'POST',
        dataType: 'json',
        success: function(data, textStatus, req){
            console.log('server respond:', data);
            window.mydata = data;
        },
        error: function(req , textStatus, errorThrown){
            console.log("jqXHR["+textStatus+"]: "+errorThrown);
            console.log('jqXHR.data', req.responseText);
        }
    });
}

window.mydata = null;
_fetch();

我尚未对此进行测试,但请告知我会为您修复。

我是怎么得到您的,您需要从ajax请求中获取结果,为此,您应该首先设置php输出结果,这样ajax才能从php获取输出结果,如下所示:

<?php
  ini_set('display_errors', 1); 
  error_reporting(E_ALL);
  $servername = "localhost";
  $username = "username";
  $password = "password";
  $dbname = "database";

  // Create connection
  $conn = mysqli_connect($servername, $username, $password);
  mysqli_select_db($conn, $dbname);

  // Check connection
  if (!$conn) 
  {
    die("Connection failed: " . mysqli_connect_error());
  }
  // echo "Connected successfully";

  $query = "SELECT mapCode FROM mapCodes";
  $result = mysqli_query($conn, $query);
  $mapCode = mysqli_fetch_row($result);

  $query1 = "SELECT used FROM mapCodes";
  $result1 = mysqli_query($conn, $query1);
  $used = mysqli_fetch_row($result1);

  $query2 = "SELECT active FROM mapCodes";
  $result2 = mysqli_query($conn, $query2);
  $active = mysqli_fetch_row($result2);

  mysqli_close($conn); 
  // Outputing results:
  echo json_encode(array('mapCode'=>$mapCode[0], 'used'=>$used[0], 'active'=>$active[0]));
?>

然后在ajax中,在ajax完成之后,使用success来侦听返回消息:

<script>
    var mapCode;
    var used;
    var active;

    function downloadCode() {
        $.ajax({
            type: 'GET',
            url: 'getMapCode.php',
            data: {
                /** Your data to send to server **/
            },
            dataType: "text",
            success: function(data) { /** Here is data returned by php echo **/
                var temp = $.parseJSON(data);
                mapCode = temp['mapCode'];
                used = temp['used'];
                active = temp['active'];
            }
        }); 
    }
</script>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM