【发布时间】: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