是否可以阻止将标题(“location:url”)发送到AJAX?

时间:2016-02-07 02:21:24

标签: javascript php jquery ajax

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

假设满足所有条件,在PHP脚本的底部我已经应用了一个url,它是根据PHP脚本本身的变量构建的,并在内部连接,如下所示:

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

问题:

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

我已经完成了一些功课,并且在将set发送到AJAX returnsndata时已经注意到了header方法的已知问题。这意味着整个标题位置页面显示在一个很小的不可见div中,我在上面提到了PHP脚本中生成的上述条件错误消息的错误。

问题:

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

这里我回应了我的PHP变量生成的实际url,它将它发送到returnsndata。然而,当提交表单时,我将返回到同一页面,并且返回数据只是从顶部的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;
});

2 个答案:

答案 0 :(得分:4)

而不是返回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);
        }
    }

答案 1 :(得分:0)

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

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

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

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

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