-2

我的 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>');
4

2 回答 2

1

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

您的目标是,当您调用时$.getJSON(),PHP 将返回一个 JSON 编码的字符串......但是因为您将该 PHP 代码放置在您的页面中,所以不相关的文本字符(包括function displayPlace(){它之前的所有内容)将在 JSON 之前内联返回,这很令人困惑$.getJSON()

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


编辑澄清:
不要把PHP放在那里。它不属于那里。

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

于 2013-01-11T18:14:31.053 回答
0

我猜你正在点击die()整个脚本中的哪个退出。之后不会将任何 javascript 发送到浏览器,因为 php 表示“此页面已完成,不要输出任何其他内容”。脚本的其余部分将停止。删除它,它应该会有所帮助。

于 2013-01-11T18:05:58.990 回答