【问题标题】:Is it possible to prevent the header("location: url") from being sent to AJAX?是否可以防止标头(“位置:url”)被发送到 AJAX?
【发布时间】:2016-02-07 02:21:23
【问题描述】:

我在页面上有一个 html 表单。表单数据通过 AJAX 发送到 PHP 脚本。在这个 PHP 脚本中,输入中的每个$_POST 都使用各种 if 语句有条件地检查。如果条件不满足特定的strlen / 其他条件,那么我将一条消息回显到 AJAX 返回数据和exit() PHP 脚本中。

假设所有条件都满足,在我的 PHP 脚本底部,我应用了一个 url,该 url 由 PHP 脚本本身中的变量构建并在内部连接,如下所示:

header("location: view_topic.php?tid='".$tid."'&page='".$page."'");

问题:

由于我在 PHP 脚本中生成 url,并且只能在其中生成它,我不得不使用 PHP header("location: ...") 作为重定向,或者必须回显 url,然后发送它返回数据,然后在我的 JavaScript/AJAX 中使用 window.location(returndata)

我已经做了一些功课,并注意到标头方法存在一个已知问题,即当 set 被发送到 AJAX 返回数据时。这意味着整个标题位置页面显示在一个微小的不可见 div 中,我在其中显示我在 PHP 脚本中生成的上述条件错误消息的错误。

问题:

在下面的代码中是我设置window.location(returndata) 的替代方法。

在这里,我正在回显由我的 PHP 变量生成的实际 url,它将其发送到 returndata。但是,当提交表单时,我会返回到同一页面,并且返回数据只是从顶部的 PHP 中回显出来。

有谁知道如何防止header("location: ...");被发送到AJAX返回数据,或者对下面的方法有什么其他的解决方案吗?

提前致谢, 里奇。

我的 AJAX:

$("#topic_form").submit(function(event){
    var formData = new FormData($(this)[0]);
    $.ajax({
    url: 'create_topic_parse.php',
    type: 'POST',
    data: formData,
    async: false,
    cache: false,
    contentType: false,
    processData: false,
        success: function (returndata) {
            if(returndata.indexOf("view_topic") != true){
                $('#message').css("color", "red").html(returndata);
                } else {
                window.location(returndata);
            }
        }
    });
    return false;
});

【问题讨论】:

  • 如果您只是要更改页面,为什么还要使用 ajax?
  • 标题不应出现在正文内容中。 AJAX 响应中的位置标头将导致浏览器透明地遵循重定向,并返回重定向页面的内容(旧 Opera 除外,它没有)。您可以在自定义标头中返回您的 URL,例如 X-Redirect 或其他内容。
  • 因为我必须在 PHP 中生成 url。

标签: javascript php jquery ajax


【解决方案1】:

不返回html,而是返回json:

{"action": "display","html":"..."}

{"action":"redirect","location":"url"}

并改变:

    success: function (response) {
        if(response.action == "display"){
            $('#message').css("color", "red").html(response.html);
        } else if (response.action == "redirect") {
            window.location(response.location);
        }
    }

【讨论】:

  • 我明白了。我会试一试,让你知道我的进展如何。干杯人。
【解决方案2】:

我认为,如果我理解正确的话。您想使用 create_topic_parse.php 生成一个您希望重定向到的 URL。

当前您要重定向到的页面显示在您现有页面的 div 中,而不是重定向。

我认为在您的 PHP 文件中,如果您回显元刷新而不是 header(),那么这应该会得到您想要的结果。

echo "<meta http-equiv=\"refresh\" content=\"0;URL=view_topic.php?tid=".$tid."&page=".$page."\">";

这些对我来说一直是身体的一部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-26
    • 2021-07-26
    • 2016-05-21
    • 2010-11-13
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 2019-12-11
    相关资源
    最近更新 更多