【问题标题】:AJAX response from PHP script not workingPHP脚本的AJAX响应不起作用
【发布时间】:2016-04-23 15:58:08
【问题描述】:

我正在搜索这个网站和其他网站几个小时,所以我变得非常绝望。 这里没有来自许多具有相同主题的问题的代码

我需要将数据插入数据库并在完成后显示一条消息。另外,我将 AJAX 与 jQuery 一起使用,因此它是异步的。它工作正常,数据被插入,但没有显示响应消息。

我是 PHP 的初学者,无法理解为什么这不起作用。相关代码如下。

PHP 函数调用:

if(isset($_POST["function"]) && !empty($_POST["function"]) && $_POST["function"] == "cl-add") {
        $dbb->addMember("MyUsername", $_POST["name"]);
        //$dbb is a DataBaseBroker instance
}

来自 Broker 的 PHP 函数:

function addMember($username, $ime) {
    $query = "INSERT INTO clan";
    $query.=" (username, ime) ";
    $query.="VALUES ('".$username."','".$ime."');";

    $result = $this->mysqli->query($query);

    if ($result) {
        echo("You added a member: ".$ime);
    } else {
        $response = "An error occured. Please try again.";
        $response .= "<br>";
        $response .= "Error: ".mysqli_error($connection);
        echo $response;
    }
}

JQuery 函数声明:

var addMember = function(name, responseFn) {
    if (name === "") {
        alert("Please enter a name");
        return;
    }
    $.ajax({
        type : 'POST',
        url: '../includes/layout/cl.php',
        dataType : 'json',
        data : {
            'name' : name,
            'function' : 'cl-add'
        },
        success : function(data) {
            responseFn(data); //not working, should alert
        }
    });
}

var responseCallback = function(data) {
    alert(data);
}

$(document).ready()里面:

$(document).on('click', '#cl-add', function(evt) {
    var name = $("#cl_frm input").val();
    addMember(name, responseCallback);
});

【问题讨论】:

  • 问题可能是您应该使用datatype : 'text'。如果您只是在 php 代码中回显一个字符串,您应该在 ajax 数据类型中处理它。如果您将其作为echo json_encode($my_variable_or_array); 回显,则可以将其用作 json 对象。
  • 你试过听完成而不是成功回调吗?
  • dataType : 'text',success : function(data) { alert(data); } 检查一次
  • 22 分钟检查这些简单的更改?
  • @bucketman 是的,现在有点用了。我做了很多改变试图自己做,我忘了把'json'改回'text'。但现在它也会提醒整个 HTML 表单结构 :) 谢谢你的帮助。

标签: javascript php jquery ajax


【解决方案1】:

在您的代码上:

dataType : 'json',

Ajax 请求正在等待 JSON 响应,但您正在提供文本响应。

您应该根据需要将 dataType: 更改为 text 或 html。

dataType : 'html',

dataType : 'text',

PHP 更改:

<?php
function addMember($username, $ime)
{
    $query = "INSERT INTO clan";
    $query .= " (username, ime) ";
    $query .= "VALUES ('" . $username . "','" . $ime . "');";

    $result = $this->mysqli->query($query);

    $response = null;

    if ($result) {
        $response = "You added a member: " . $ime;
    } else {
        $response = "An error occured. Please try again.";
        $response .= "<br>";
        $response .= "Error: " . mysqli_error($connection);
    }

    echo $response;
    exit;
}

【讨论】:

  • 是的,这行得通。但现在它会在警报中显示表单的整个 HTML 代码。消息在那里,但在 HTML 下方。你有没有遇到过这个问题?感谢您的帮助。
  • @NikolaMarkovic 除了只有函数或 php 逻辑之外,我不知道您在该文件 cl.php 上输出了其他内容。尝试将视图模板与逻辑分开。或添加exit;在回显消息响应后,就像我在答案中更新的代码一样
【解决方案2】:

将 dataType 参数更改为“文本”。你也可以在 JavaScript 中提醒一个对象,实际上你并不是想提醒一个对象,但我只是想提一下。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-02
    • 2016-05-14
    • 2014-03-08
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多