PHP :如何存储 js 调用的返回值

PHP :How to store return value of js call

本文关键字:js 调用 返回值 存储 何存储 PHP      更新时间:2023-09-26

我有一个函数

function getCalendarData(){
   ob_start();
   echo "<script type='text/javascript' src='http://splocal/courses/calendar.js'></script>";
   $calendarAry = ob_get_contents();
   print_r($calendarAry);
   return $calendarAry;
 }

在这里,我尝试将JS调用的返回值分配给一个变量。 但它不起作用。

正确的方法是什么?

calender.js file 

    function returnCalenderArray(data){
        console.log(data);
        document.write(data);
        return data;
    }

    $.ajax({
         type: "GET",
         url: "http://localhost:8080/privateTraining/getTrainingsJson",
         data: { ListID: '1'},
         dataType: "jsonp",
         success: function(data) {
         alert('Hi'+data);
         returnCalenderArray(data);
      }
});  

从技术上讲,你不能从JavaScript调用PHP,至少不能在同一页面上调用。PHP 是服务器端语言,JS 是客户端语言。从 JS 函数调用 PHP 脚本的唯一方法是在后台打开一个新页面(不显示给浏览器)并执行此操作。它被称为AJAX,我建议您在这项技术中进行一些休息。

对于使用AJAX的非常简单的方法,请使用JS框架,例如jQuery

你可以尝试用PHP构造javascript。 这将允许您加载可执行内容而不是静态内容。为此,首先你需要一个javascript函数将php加载到脚本元素中。像这样的东西:-

function loadscript(src){
       var myscript = document.createElement('script');
       myscript.src = src;
       document.getElementByTagName('head')[0].appendChild(src);
}
然后,您可以将PHP

变量写入构造的JS代码,然后通过在浏览器中调用函数来加载PHP。PHP将是这样的。

在服务器 myphpcode 上.php

<?php
$sessionid = $_SESSION['user_id'];
?>
mydiv.innerHTML = 'User ID ' + <?php echo $sessionid; ?>;   

在 HTML 页面中调用 js

loadscript('myphpcode.php');

使用相同的方法通过 PHP 将数据发送回服务器,方法是在 JavaScript 中构造一个有效的查询字符串以附加到 loadscript 调用。

var a = 'some data';
var b = 'some more data';
var urlstring  = 'myphpcode.php?a=' + a + '&b=' + b;
loadscript(urlstring);

然后,您可以将JavaScript变量存储在数据库中,例如通过在myphpcode.php中编写函数。

<?php
include mydbconnection.php  // some database connection code
if ((isset $_GET["a"]) && (isset $_GET["b"])) { //check the url query string has data 
   $a = $_GET["a"];
   $b = $_GET["b"];
   $query = "INSERT into mydatabase.mytable (columnA, columnB)
             VALUES ('" . $a . "','" . $b . "');";
   if ($mysqli->prepare($query)){
       $mysqli->execute();
   }
}
?>