【问题标题】:Echo PHP message after AJAX successAJAX 成功后回显 PHP 消息
【发布时间】:2015-04-26 16:49:52
【问题描述】:

我有一个模式,当用户单击删除按钮时会显示。一旦他们点击删除按钮,我将使用 AJAX 提交表单。 Eveything 工作正常,但它不显示我在 PHP 中设置的成功消息。

这是我的 AJAX 代码:

function deleteUser(){
    var id = <?php echo $userdetails['id'] ?>;  
    $.ajax({
        type: "POST",
        url: 'admin_user.php?id=' + id,
        data: $('form.adminUser').serialize(),
        error: function(e){
                alert(e);
            },
        success: function () {
           // This is empty because i don't know what to put here.
        }
    }); 
}

这是 PHP 代码:

if ($deletion_count = deleteUsers($deletions)) {
        $successes[] = lang("ACCOUNT_DELETIONS_SUCCESSFUL", array($deletion_count));
    } else {
        $errors[] = lang("SQL_ERROR");
    }

然后我这样称呼它:

<div class="col-lg-12" id="resultBlock">
   <?php echo resultBlock($errors,$successes); ?>
</div>

当我使用 AJAX 时,它不会显示消息。这适用于不需要 AJAX 提交表单的其他页面。

【问题讨论】:

  • 你的成功函数是空的。您希望消息自动显示在哪里?
  • 您的 header() 调用毫无意义。即使它确实有效,您也不会重定向用户的浏览器,而是重定向用户永远看不到的 ajax 请求。
  • @Popnoodles 我不知道成功函数应该做什么。我更新了上面的代码以显示消息的显示位置。基本上位于页面顶部的 div 中。
  • @MarcB 我想在页面上显示消息然后重定向。

标签: javascript php jquery ajax


【解决方案1】:

我认为您对 AJAX 的工作方式感到困惑,您调用的 PHP 脚本不会直接输出到页面,请考虑以下 AJAX 请求的简化生命周期:

Main Page -> Submit Form -> Put form data into array
          |
          --> Send array to a script to be processed on the server
          |
          |----> Callback from the server script to modify DOM (or whatever you want to do)

有很多回调,但这里让我们讨论success 和error

如果您的 PHP 脚本在服务器上未找到或有任何其他内部错误,则返回 error 回调,否则触发 success 回调,在 jQuery 中您可以指定要接收的数据数组您的回调 - 这包含从您的 PHP 脚本回显的任何数据。

在您的情况下,您应该修改您的 PHP 文件以回显您的数组,这意味着如果发出成功的请求,$successes 或 $errors 数组将回显到您的 AJAX 调用的数据参数

if ($deletion_count = deleteUsers($deletions)) {
    $successes[] = lang("ACCOUNT_DELETIONS_SUCCESSFUL", array($deletion_count));
    echo $successes;
} else {
    $errors[] = lang("SQL_ERROR");
    echo $errors;
}

然后您可以通过将对象记录到控制台来测试您收到的对象:

success: function(data) {
    console.log(data);
} 

【讨论】:

  • 它仍在alert中加载整个页面的html。
  • 我做了一些编辑,但根据您的评论,我能够对其进行一些修改。看我的回答。
  • 谢谢!我想做正确的事,所以我不确定是否应该将您的答案标记为正确?
  • 如果您觉得我的回答指向您的解决方案,那么接受它作为正确答案会很棒
【解决方案2】:

好吧,目前还不清楚什么有效,什么无效,但有两件事困扰着我:Ajax 中的成功函数是空的,并且您有一个 header 函数进行刷新成功案例。您是否尝试过删除 header 功能?

【讨论】:

  • 是的,我删除了它,但它仍然不起作用。成功函数为空的原因是因为我不知道该放什么以在引导警报div中显示php错误。
  • 好吧,只需使用良好的价值来做类似$('#idofyourdiv').html(data) ; 的事情。您应该检查成功函数可能的不同原型,以了解如何获取您的 php 脚本回答的数据。您还应该使用网络分析器(在 Chrome -> 工具 -> 开发者工具中可用)来查看您的 PHP 确实返回了什么。
  • 从技术上讲,问题是data 再次输出整个页面。我怎样才能显示这个resultBlock($errors,$successes);
  • 那么,您怎么知道 Ajax 请求了数据,而不是直接访问页面?
  • 不确定我明白你的意思。当我使用 Firebug 查看 POST 响应时,它显示警报在那里,但它没有显示在页面上。
【解决方案3】:
success: function(data) {
     alert(data);
} 

如果成功,这将提醒在 php 页面上回显的数据。这就是它的工作原理。 我在使用 $.post 时经常使用它

你的标题不会做任何事情。您必须在 Java 脚本端显示数据,可能带有警报,然后在 javascript 中将用户重定向到您想要的位置。

【讨论】:

  • 我不想使用警报。我希望它显示在引导警报 div 中,然后重定向,这就是我使用标题的原因。我已将其删除,因为似乎每个人都在这里关注错误的事情。
【解决方案4】:

你需要在成功函数中放一些 var

success: function(data) {
  alert(data);
}

然后,当您阅读 var "data" 时,您可以对文本执行任何操作

【讨论】:

    【解决方案5】:

    这是我将 PHP 更改为:

    if ($deletion_count = deleteUsers($deletions)) {
            $successes[] = lang("ACCOUNT_DELETIONS_SUCCESSFUL", array($deletion_count));
            echo resultBlock($errors,$successes);
        } else {
            $errors[] = lang("SQL_ERROR");
            echo resultBlock($errors,$successes);
        }
    

    我把 AJAX 改成了这样:

    function deleteUser(){
        var id = <?php echo $userdetails['id'] ?>;      
        $.ajax({
            type: "POST",
            url: 'admin_user.php?id=' + id,
            data: $('form.adminUser').serialize(),
            error: function(e){
                    alert(e);
                },
            success: function (data) {
                result = $(data).find("#success");       
                $('#resultBlock').html(result);
            }
        }); 
    }
    

    因为数据正在加载所有 html,所以我必须从 HTMl 中准确找到我要查找的内容,这就是我这样做的原因.find。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      • 2016-10-09
      • 1970-01-01
      • 2023-03-25
      • 2021-08-17
      相关资源
      最近更新 更多