从php调用Javascript函数

从php调用Javascript函数,javascript,php,html,Javascript,Php,Html,我的代码执行以下操作(注意,所有HTML、JavaScript和PHP代码都在同一个文件中): 表单用于输入数据,并由PHP验证。PHP从Google API获取JSON数据并将其发送到JavaScript。JavaScript函数解析JSON并在表中显示所需字段 我想在获取JSON后从PHP调用JavaScript函数,但当我从PHP调用它时,控制台显示未定义的函数。当我从HTML按钮调用函数时,同样的代码也会起作用。我尝试过在PHP脚本之前、之后、在头部、基本上在任何地方定义函数。当我用其他

我的代码执行以下操作(注意,所有HTML、JavaScript和PHP代码都在同一个文件中):

表单用于输入数据,并由PHP验证。PHP从Google API获取JSON数据并将其发送到JavaScript。JavaScript函数解析JSON并在表中显示所需字段

我想在获取JSON后从PHP调用JavaScript函数,但当我从PHP调用它时,控制台显示未定义的函数。当我从HTML按钮调用函数时,同样的代码也会起作用。我尝试过在PHP脚本之前、之后、在头部、基本上在任何地方定义函数。当我用其他JavaScript函数在头部定义它时,其他函数也会得到函数未定义错误

JavaScript函数:

    function generateTable() {
        var placejs = <?php echo json_encode($placesresponse); ?>; //getting the json from php
        var pjs = JSON.parse(placejs);
        var body = document.getElementsByTagName("body")[0];
        var tbl = document.createElement("table");
        var tblBody = document.createElement("tbody");
        var results = pjs.results;
        //Outputing the headers
        var row = document.createElement("tr");
        var thead = document.createElement("th");
        var headtext = document.createTextNode("Category");
        thead.appendChild(headtext);
        row.appendChild(thead);
        thead = document.createElement("th");
        headtext = document.createTextNode("Name");
        thead.appendChild(headtext);
        row.appendChild(thead);
        thead = document.createElement("th");
        headtext = document.createTextNode("Address");
        thead.appendChild(headtext);
        row.appendChild(thead);
        tblBody.appendChild(row);
        //outputting the values
        for (var i = 0; i < results.length ; i++) {
            row = document.createElement("tr");
            var curresult = results[i];
            var result_keys = Object.keys(curresult);
            for (var j = 0; j < result_keys.length ; j++) {
                var cell = document.createElement("td");
                var cur = result_keys[j];
                if(result_keys[j] == "icon")
                {
                var im = document.createElement("img");
                im.setAttribute("src",curresult[cur]);
                cell.appendChild(im);
                row.appendChild(cell);
                }
                if(result_keys[j] == "name")
                {
                var cellText = document.createTextNode(curresult[cur]);
                cell.appendChild(cellText);
                row.appendChild(cell);
                }
                if(result_keys[j] == "vicinity")
                {
                var cellText = document.createTextNode(curresult[cur]);
                cell.appendChild(cellText);
                row.appendChild(cell);
                }
            }
            tblBody.appendChild(row);
        }
        tbl.appendChild(tblBody);
        body.appendChild(tbl);
        tbl.setAttribute("border", "1");
        tbl.style.marginLeft = "auto";    
        tbl.style.marginRight = "auto"; 
        tbl.style.borderCollapse = "collapse";
    }
函数generateTable(){
var placejs=;//从php获取json
var pjs=JSON.parse(placejs);
var body=document.getElementsByTagName(“body”)[0];
var tbl=document.createElement(“表”);
var tblBody=document.createElement(“tbody”);
var results=pjs.results;
//输出标题
var行=document.createElement(“tr”);
var thead=document.createElement(“th”);
var headtext=document.createTextNode(“类别”);
附加子项(标题文本);
行。追加子项(thead);
thead=document.createElement(“th”);
headtext=document.createTextNode(“名称”);
附加子项(标题文本);
行。追加子项(thead);
thead=document.createElement(“th”);
headtext=document.createTextNode(“地址”);
附加子项(标题文本);
行。追加子项(thead);
tblBody.appendChild(世界其他地区);
//输出值
对于(var i=0;i
在PHP中,我称之为:

    $placesurl = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=$latitude,$longitude&radius=$radius$type&keyword=$keyword&key=$placeskey";
        $placesresponse = file_get_contents($placesurl); //getting the json
        $placesjson = json_decode($placesresponse,true);
        if($placesjson['status']=="ZERO_RESULTS"){
            echo '<script>';
            echo 'noresult();';
            echo '</script>';
        }
        else{
            echo '<script>';
            echo 'generateTable();'; //function call
            echo '</script>';

        }
$placesurl=”https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=$latitude,$longitude&radius=$radius$type&keyword=$keyword&key=$placeskey”;
$placesresponse=文件获取内容($placesurl)//获取json
$placesjson=json_decode($placesresponse,true);
如果($placesjson['status']==“零结果”){
回声';
回声“noresult();”;
回声';
}
否则{
回声';
echo'generateTable();';//函数调用
回声';
}
这是一个任务,我必须遵循指导原则,所以我不能仅仅从PHP生成表。出于同样的原因,我不能使用jQuery。任何帮助都将不胜感激,我对这东西还不熟悉

编辑:


1) 很抱歉没有在前面发布此消息,控制台显示了一个额外的错误:“SyntaxError:expected expression,Get'您不需要此行:

var pjs = JSON.parse(placejs);

这是因为您在前一行中回显了一个原始json对象,而不是json字符串。

在javascript函数中必须在调用之前定义。请检查您的php结果html。

您在这里没有足够的信息让我给出明确的答案,而且我不是php爱好者,因此我无法对您的php代码进行说明,但它似乎是如果您使用php将JSON对象注入到javascript变量中。这样做之后,应该不需要调用JSON.parse。只有在需要将javascript字符串转换为javascript对象时,才应该这样做。您已经有了一个javascript对象。
placejs
应该包含您想要使用的对象。如果使用浏览器的调试工具,您应该看到该变量包含一个对象。不需要解析javascript对象,它已经是一个对象了。

您尝试过这种方法吗
?>generateTable()@AhmedSunny-为什么会有不同?问题中没有足够的信息来确定问题是什么。请尝试提供(强调“完成”)。确保在“函数未定义”错误之前没有报告任何其他错误。(由于加载页面时报告的语法错误,该函数可能未定义)。很抱歉没有在前面发布此错误,控制台在此之前指出了一个错误:“SyntaxError:expected expression,got'我测试了多一点,很明显,我在与generateTable()相同的脚本标记中定义的任何函数在控制台中也显示为未定义。脚本标记放在函数调用之前。虽然问题中的代码存在问题,但这无助于解决问题所涉及的问题。我添加它只是为了确保
var pjs = JSON.parse(placejs);