Ajax / PHP:调用正常,但未从 PHP 发出警报结果

Posted

技术标签:

【中文标题】Ajax / PHP:调用正常,但未从 PHP 发出警报结果【英文标题】:Ajax / PHP: Call working correctly but not alerting result from PHP 【发布时间】:2015-09-07 06:40:16 【问题描述】:

我使用下面的方法通过 Ajax(在 jQuery 中)将数据传递到 php 页面。 然后 PHP 页面将它们插入 mysql 数据库(如果它们不存在)。

一切正常,但我无法取回我在 PHP 中回显的结果。

我认为在成功函数中可以使用一个简单的警报,但 我没有收到任何警报 - 无论是插入成功还是我故意提交已经存在的内容时。

有人可以帮我解决这个问题吗?

阿贾克斯:

$.ajax(        
    type: "post",   
    url: baseURL + "/ajax.php", // baseURL is the main URL, i.e. http://www.myurl.com
    cache: "false",
    data: 
        email: email,
        dob: dob
    ,
    success: function(data)
        alert(data);
    ,
    error: function()
    
);

PHP:

$conn = new mysqli($servername, $username, $password, $dbname);
$conn->set_charset("utf8");
if($conn->connect_error)
    die("Connection failed: " . $conn->connect_error);

$email = $_POST["email"];
$dob = $_POST["dob"]; 
$sql = "SELECT email FROM Users WHERE email = '" . $email . "'";
$query = $conn->query($sql);
if(mysqli_num_rows($query) > 0)
    echo "record already exists";
else
    $sql = "INSERT INTO Users (email, dob) VALUES ('" . $email . "', '" . $dob . "')";
    if ($conn->query($sql)) 
        echo 'update successful';
    else
        echo 'update failed';
    ;

$conn->close();

提前非常感谢, 迈克

【问题讨论】:

如果您使用的是chrome开发者工具或firebug,请查看网络日志,查看请求是否正确返回。在您的“响应”选项卡中,您应该能够看到这条回显消息。 谢谢,我正在使用 Chrome。会试试这个。 您是否尝试在当前域之外进行跨域 AJAX 调用? 嗯,通过删除 baseURL 并且只在 AJAX 调用中使用相对 URL,有什么区别吗?我可能误解了来自 IE 的错误消息。要在 chrome 中打开网络日志,只需右键单击页面上的任意位置并选择“检查元素”选项。在那里,您必须单击“网络”选项卡。现在发出 AJAX 请求,它会显示在这里。单击它可以获取状态、标题、响应等。 让我们continue this discussion in chat. 【参考方案1】:

将其作为 JSON 返回,使用 json_encode

   <?php
    //....
    if(mysqli_num_rows($query) > 0)
        $str =  "record already exists";
    else
        $sql = "INSERT INTO Users (email, dob) VALUES ('" . $email . "', '" . $dob . "')";
        if ($conn->query($sql)) 
            $str = 'update successful';
        else
            $str = 'update failed';
        ;
    
$data = array('response' => $str);

header('Content-Type: application/json');
echo json_encode($data);

【讨论】:

非常感谢 - 让我试试这个。我需要在 Ajax 调用中为此设置数据类型吗? 我尝试了两次,但它也没有给我任何警报(假设我不必在 Ajax 中为此设置数据类型)。 学习使用 Firebug 或 Chrome 开发者工具。像这样的调试有点毫无意义。您必须弄清楚服务器返回什么(无论消息是什么)。 谢谢 - 我刚刚更新了上述 cmets 下的结果。 我们已经解决了这个问题(参见上面的 cmets),但您对 json 响应的建议仍然非常有帮助。再次感谢!【参考方案2】:

我根据 Ixer 的建议为响应添加了 json 编码解决方案,这使它更易于处理,我喜欢这种方法。

然而,实际问题出在我设置的 baseURL 中。 我的 URL 以 http:www.url... 开头,而开发人员工具中的错误提到了以 http:url... 开头的 URL,所以由于某种原因,它似乎认为导航到 ajax 页面是转到不同的 URL。

将我的标头中的基本 URL 更改为 http:url... 解决了问题 - 感谢 Timphs 抽出时间帮助我进行测试。

【讨论】:

以上是关于Ajax / PHP:调用正常,但未从 PHP 发出警报结果的主要内容,如果未能解决你的问题,请参考以下文章

AJAX 使用从 PHP 生成的 HTML 调用的函数更新 MYSQL 数据库

Ajax 调用未从 ActiveRecord 返回最新数据

PHP & jQuery ajax 调用无需等待响应

参数未从 Ajax 调用填充(尝试了一切)

数据中的Ajax传递参数发送到php

登录php独立工作,但未按预期在网站中[关闭]