【问题标题】:Ajax request in MVC doesn't return corresponding value to the HTML pageMVC 中的 Ajax 请求不会向 HTML 页面返回相应的值
【发布时间】:2026-02-16 15:40:01
【问题描述】:

下面是我在仪表板模块中的脚本。

$(function()
{
    var o;
    $.get('dashboard/xhrgetInsert',function(o)
    {
            for(var i = 0;i <= o.length; i++)
            {
                $("#appendHere").append("<div>"+o[i].text+"</div>");
            }
    },'json');
    $("#randomInsert").submit(function()
    {
        alert("hi");
        var data = $(this).serialize();
        var url = $(this).attr("action");
        $.post(url,data,function(o)
        {
            $("#appendHere").append("<div>"+o+"</div>");
        },'json');
        return false;
    });

});

假设,当我在仪表板页面中时,此函数 (xhrgetInsert) 必须返回要附加到 HTML 中的值。不幸的是,它没有附加任何东西,当我在 chrome 控制台“响应”中检查时,它说方法不存在。但是如果我在 url 中键入方法名称,它会显示我指定的以 json 格式返回的值。

'xhrInsert()' 函数也是如此,因为它不返回要附加的值。数据库连接非常完美,因为它可以从 db 中插入和选择数据,但无法取回值.. 我首先想知道,为什么它说该方法不存在,其次为什么不返回任何值?

我的“仪表板控制器调用仪表板模型”

public function xhrInsert()
    {
        $this->model->xhrInsert();
    }
    public function xhrgetInsert()
    {
        $this->model->xhrgetInsert();
    }

仪表板模型包含对数据库的 mysql 查询,以 jason 格式返回值

public function xhrInsert()
    {
        $text =  $_POST['text'];
        $sql = $this->db->prepare("INSERT INTO data(text)VALUES(:text)");
        $sql->execute(array(':text'=>$text));
        echo json_encode($text);
    }
    public function xhrgetInsert()
    {
        $sth = $this->db->prepare("SELECT * FROM data");
        $sth->setFetchMode(PDO::FETCH_ASSOC);
        $sth->execute();
        $data = $sth->fetchAll();
        echo json_encode($data);
    }

最后,这是我的仪表板 HTML

<h1>Dashboard</h1>
<form id="randomInsert" action="<?php echo URL;?>dashboard/xhrInsert" method="post">
    <label>Text: </label><input type="text" name="text"/><br/>
    <input type="submit"/>
</form>
<div id="appendHere"></div>

控制台截图

【问题讨论】:

  • // 在这个 var o 之后的 html 文件中; var base_url = $('#base_url').val(); $.get(base_url+'dashboard/xhrgetInsert',function(o) 试试这个。
  • 在这个 var o 之后; var base_url = $('#base_url').val(); $.get(base_url+'dashboard/xhrgetInsert',function(o) 试试这个。
  • @AmolNavsupe,按照您的建议进行了尝试,但仍然没有返回任何值
  • 兄弟你有Skype吗?
  • 尝试使用“exit;”或 ""die;" 在 "echo json_encode($data);" 之后,因为根据控制台,你得到了响应,但是整个 html 页面并且你只需要 json 数据,你可以只为 ajax 请求设置条件。

标签: php jquery ajax model-view-controller


【解决方案1】:

函数应该将结果 json 数据返回给 ajax 请求,这样它就不会用结果呈现整个 html 页面。

public function xhrInsert(){
    echo $this->model->xhrInsert();
    die;
}
public function xhrgetInsert()
{
    echo $this->model->xhrgetInsert();
    die;
}

型号

public function xhrInsert()
{
    $text =  $_POST['text'];
    $sql = $this->db->prepare("INSERT INTO data(text)VALUES(:text)");
    $sql->execute(array(':text'=>$text));
    return json_encode($text);
}
public function xhrgetInsert()
{
    $sth = $this->db->prepare("SELECT * FROM data");
    $sth->setFetchMode(PDO::FETCH_ASSOC);
    $sth->execute();
    $data = $sth->fetchAll();
    return json_encode($data);
}

【讨论】:

  • 您是否从 xhrgetInsert() 函数获取数据?你能分享控制台的截图吗?
  • 如果我在 url 选项卡中手动键入函数,例如:dashboard/xhrgetInsert,我将在控制台中获取 xhrgetInsert 的数据。但即便如此,它也没有附加到 html。但是如果我不手动访问该函数,那么它会说控制台中不存在方法/函数。
  • 您的最新编辑适用于 xhrInsert() 但不适用于 xhrgetInsert()..我希望每次刷新页面时都会自动调用 xhrgetInsert ,这就是我将其包含在 $(function() 中的原因{})..这里有什么问题吗?
  • ajax 调用的响应是什么。你能分享我的日志吗.. $.get('dashboard/xhrgetInsert',function(o) { console.log(o);
  • 检查url,是否正确,以及ajax请求的响应码。我认为你应该在 url 之前准备域名
最近更新 更多