AJAX, Laravel 4.2 - POST状态已取消,如何post路由
AJAX, Laravel 4.2 - POST status cancelled, how to post to route
我一直在为这个问题绞尽脑汁。我有一个 Jquery 块,它在网站内将 AJAX post 发送到 url。当用户重定向离开他们所在的当前页面时,就会发生这种逻辑。
问题是我在 url 上使用 Jquery 脚本,我重定向离开页面,然后检查 chrome 中的开发人员控制台并提出了一个POST 状态为已取消。我检查了我的数据库中的 table 并且它没有插入记录,所以我认为状态意味着它永远无法到达 URL.
定义了ajaxtest路由的路由文件
<?php
Route::post('ajaxtest', array('before' => 'adminFilter', 'uses' => 'TestsController@ajaxTest'));
?>
涉及Controller中的方法
<?php
public function ajaxTest() {
DB::table('test_ajax')->insert(
array('test_string' => 'TestTest')
);
if (Request::isJson()) {
$name = Input::get('name');
$age = Input::get('age');
DB::table('test_ajax')->insert(
array('test_string' => $name.'|'.$age)
);
} else {
DB::table('test_ajax')->insert(
array('test_string' => $name.'|'.$age)
);
}
}
?>
涉及的 Jquery 意味着如果用户重定向离开当前页面,则 AJAX post 到 ajaxtest url。
<script type="text/javascript">
console.log("Host url" + window.location.host);
var formFlag = false;
$("#submitTest").click(function() {
formFlag = true;
});
window.onbeforeunload = function(){
if(!formFlag){
return "Your changes may not be saved.";
}
}
$( window ).unload(function() {
$.post("<?php echo Request::root(); ?>/ajaxtest/", { name: "John", age: "26" });
});
</script>
开发者控制台请求信息,状态为已取消
Request URL:http://192.168.0.9/ajaxtest/
Request Headers
Provisional headers are shown
Accept:*/*
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Origin:http://192.168.0.9
Referer:http://192.168.0.9/tests/question
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36
X-Requested-With:XMLHttpRequest
Form Dataview sourceview URL encoded
name:John
age:26
由于$.post
是异步方法,$( window ).unload(..)
不等待执行就取消了。尝试改变这个
$( window ).unload(function() {
$.post("<?php echo Request::root(); ?>/ajaxtest/", { name: "John", age: "26" });
});
为此:
$( window ).unload(function() {
$.ajax({
type: 'POST',
url: '<?php echo Request::root(); ?>/ajaxtest/',
data: { name: "John", age: "26" },
async: false
});
});
它像同步方法一样调用 POST 所以浏览器应该等到它结束然后卸载。
但是不建议在 unload
中等待某些东西。它可能不是用户友好的。
我一直在为这个问题绞尽脑汁。我有一个 Jquery 块,它在网站内将 AJAX post 发送到 url。当用户重定向离开他们所在的当前页面时,就会发生这种逻辑。
问题是我在 url 上使用 Jquery 脚本,我重定向离开页面,然后检查 chrome 中的开发人员控制台并提出了一个POST 状态为已取消。我检查了我的数据库中的 table 并且它没有插入记录,所以我认为状态意味着它永远无法到达 URL.
定义了ajaxtest路由的路由文件
<?php
Route::post('ajaxtest', array('before' => 'adminFilter', 'uses' => 'TestsController@ajaxTest'));
?>
涉及Controller中的方法
<?php
public function ajaxTest() {
DB::table('test_ajax')->insert(
array('test_string' => 'TestTest')
);
if (Request::isJson()) {
$name = Input::get('name');
$age = Input::get('age');
DB::table('test_ajax')->insert(
array('test_string' => $name.'|'.$age)
);
} else {
DB::table('test_ajax')->insert(
array('test_string' => $name.'|'.$age)
);
}
}
?>
涉及的 Jquery 意味着如果用户重定向离开当前页面,则 AJAX post 到 ajaxtest url。
<script type="text/javascript">
console.log("Host url" + window.location.host);
var formFlag = false;
$("#submitTest").click(function() {
formFlag = true;
});
window.onbeforeunload = function(){
if(!formFlag){
return "Your changes may not be saved.";
}
}
$( window ).unload(function() {
$.post("<?php echo Request::root(); ?>/ajaxtest/", { name: "John", age: "26" });
});
</script>
开发者控制台请求信息,状态为已取消
Request URL:http://192.168.0.9/ajaxtest/
Request Headers
Provisional headers are shown
Accept:*/*
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Origin:http://192.168.0.9
Referer:http://192.168.0.9/tests/question
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36
X-Requested-With:XMLHttpRequest
Form Dataview sourceview URL encoded
name:John
age:26
由于$.post
是异步方法,$( window ).unload(..)
不等待执行就取消了。尝试改变这个
$( window ).unload(function() {
$.post("<?php echo Request::root(); ?>/ajaxtest/", { name: "John", age: "26" });
});
为此:
$( window ).unload(function() {
$.ajax({
type: 'POST',
url: '<?php echo Request::root(); ?>/ajaxtest/',
data: { name: "John", age: "26" },
async: false
});
});
它像同步方法一样调用 POST 所以浏览器应该等到它结束然后卸载。
但是不建议在 unload
中等待某些东西。它可能不是用户友好的。