【问题标题】:Post return values with AJAX?使用 AJAX 发布返回值?
【发布时间】:2014-03-08 08:57:24
【问题描述】:

我正在使用 Code Igniter,并且我的视图中有以下 Javascript 函数。我试图从控制器中的处理函数中回显诸如“错误”之类的值,但“成功”代码总是在下面的这个函数中运行。

我是使用 echo 还是 return 来响应 AJAX 帖子?我为成功和失败返回什么价值?

<script>
function removeDatacenter(id)
{
    var cfm = confirm("Do you wish to delete this datacenter?");

    if (cfm==true)
    {
        $.ajax({
            type: "POST",
            url: "<?=base_url()?>datacenters/remove_handler.php",
            data: { id: id },
            success: function(result)
            {
                document.location.href = document.URL + "?result=success";
            },
            error: function(result)
            {
                document.location.href = document.URL + "?result=failed";
            }}
        );
    }
};
</script>

【问题讨论】:

  • 如果您在您的 removeDatacenter() 函数中回显某些内容,它是否可以作为您的处理程序中 AJAX 操作的响应?我依稀记得类似的东西......
  • 你影响了 DOM。在你的 JavaScript 中返回值不会有任何好处,因为你的代码是异步运行的。当然,echo 是 PHP,它将是一个字符串,作为 JavaScript result 参数传递,在 successerror 上。
  • 请注意,$.ajax() 将尝试自动将从服务器发回的数据转换为 JSON,如果您使用 PHP 的 echo json_encode($associativeArray)。您可以使用dataType 属性来强制数据类型。

标签: javascript php jquery ajax post


【解决方案1】:

如果 ajax 请求成功发送到您的脚本,成功方法就会运行。它没有说明请求返回的内容。

如果您只是在 PHP 脚本中执行 echo "error";,您可以像这样检查 success 方法中的值:

success: function(response) {
    if (response == "error") {
        document.location.href = document.URL + "?result=failed";
    }
    else {
        document.location.href = document.URL + "?result=success";
    }
}

编辑:人们倾向于在 PHP 代码中使用 json_encode 并将 json 字符串解码为 javascript 代码中的对象。这样您就可以从脚本中发送更多结构化数据。

【讨论】:

    【解决方案2】:

    您回显的任何文本都将被 AJAX 视为成功。即使是“错误”这个词。为了触发 Javascript 错误处理程序,您需要触发某种实际的 HTTP 错误。如果您只是出于测试目的尝试触发错误,则可以在控制器中引发异常。或者将 AJAX 请求指向您服务器上不存在的 URL(然后您会收到 404 错误)。

    顺便说一句,您在 Javascript 中的错误回调在 API 上略有偏差。取决于您在错误处理程序中执行的操作,这可能无关紧要,但这是完整的调用:

    error: function(xmlHttpRequest, textStatus, errorThrown) {
      //handle error here
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-17
      • 2020-01-14
      • 1970-01-01
      • 2012-11-06
      • 1970-01-01
      相关资源
      最近更新 更多