PHP脚本不在函数内运行


PHP Script Not Running Inside Function

我有一个PHP脚本,它一直在工作,直到我把它移动到一个Javascript函数里面。一个人能不这样做吗?

//Javascript
function displayPlace() 
{
//PHP
    <?php
    $place = mysql_query("select * from tblRestaurants order by RestName ASC");
    while ($nt= mysql_fetch_assoc($place))
    $arrData[] = $nt;
    if(isset($_GET["ajax"]))
     {
    echo json_encode($arrData);
    die();
     }
    ?>  
//Javascript
    $.getJSON("index.php?ajax=true", function(data) {
        $.each(data, function(index, objRecord) {
            var option=document.createElement("option");
            option.value=objRecord.RestID;
            option.text=objRecord.RestName;
            $("#Doggie").append('<option value="' + objRecord.RestID + '">' + objRecord.RestName     + '</option>');

虽然该PHP代码片段可能与您放置它的Javascript函数相关,但由于您将其放置在代码的深处,因此它没有返回正确的响应。

你的目标是,当你调用$.getJSON(), PHP将返回json编码的字符串…但因为你把PHP代码在你的页面,不相关的文本字符(包括function displayPlace(){和它之前的一切)得到JSON之前的内联返回,这是令人困惑的$.getJSON()

将该PHP片段放在代码的顶部以避免此问题。或者更好的是,创建一个单独的json.php页面来处理JSON请求。



不要把PHP放在那里。它不属于那里。

将PHP代码放在Javascript函数中,当调用Javascript函数时,不会导致该代码执行。PHP在请求页面时在服务器上运行,一旦页面被提供,它就停止*。
当您调用JSON函数时,您将再次请求页面,因此PHP将执行并返回整个页面,直到它到达该代码片段。而不是返回一个有效的JSON字符串,你将有一堆HTML和Javascript,和,然后一个JSON字符串。此响应不可用。
在您之前使用PHP代码片段的任何地方(当它工作时)都是合适的。更容易维护的做法是将所有与返回JSON相关的PHP代码移到名为json.php的文件中,然后从$.getJSON()而不是index.php请求文件

我猜您正在击中退出整个脚本的die()。在此之后,没有任何javascript会被发送到浏览器,因为PHP说"这个页面已经完成,不要输出任何其他内容"。脚本的其余部分将停止。把它去掉,应该会有帮助。