【发布时间】:2011-09-20 19:50:06
【问题描述】:
使用 JQuery/AJAX 调用一些 CakePHP 函数并将响应 HTML 转储到容器 DIV 中,将所有内容加载到我的页面中。
通常该页面包含一个表单,我想在将新页面注入容器 DIV 之前发布该表单。当用户点击主页按钮时,此 POST 完成。
表单数据通过 POST 发送到 CakePHP 函数,然后该函数保存数据并在 die() 之前回显“保存完成”消息。然后在调用我的 post 函数后,主页被加载到容器 div 中。
问题是,有时它并不总是保存我的表单数据。
有两种情况:
1 - 保存作品。响应代码为 200。响应数据为“保存完成”
2 - 保存不起作用。响应代码(根据我的 js 函数)是 200,因为我提醒它。但是,在这种情况下,Chrome 会说响应是 302。响应数据包含我的主页。我的 cakephp 代码在我要发布的函数中没有重定向。
我的主页按钮:
function ajaxLoad(url) {
saveThisPage();
$.ajaxSetup ({// Disable caching of AJAX responses
cache: false
});
$('#content').load(url, function(response, status, xhr));
return false;
}
saveThisPage =function() {
var roc_data = $("#CustomerRocForm").serialize()
var roc_url = '/customers/roc'
$.ajaxSetup ({
cache: false
});
$.post(roc_url, roc_data, function(roc_response, roc_status, roc_xhr) {
alert(roc_xhr.status)
});
}
tl;博士:
用户点击主页按钮。这在当前页面上发布表单,然后将主页加载到容器 div 中。表单提交 POST 有时会返回 302
【问题讨论】:
-
我认为这是某种竞争条件,因为 POST(表单数据)和 GET(新页面)都紧随其后。就好像 POST 调用正在“接收”来自 GET 调用的响应一样。