我在页面上有一个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;
});
答案 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."\">";
这些一直是我身体的一部分。