在Laravel 5.1中,我的ajax调用有问题。如果我有一个序列ajax调用(例如10),Laravel会随机地响应我一个错误代码500,并说“哇,看起来好像出了什么问题。”
我的ajaxcall是:
data.forEach(function(e,i,a){
$.ajax({
url:"/api/insert",
headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
method:"POST",
data: {"text":txt, "lat": lat, "lng":lng, "title":i},
success:function(ret){
console.log(ret);
}
});
}
我的数据没有问题,似乎Laravel在连续的ajaxcall上有问题
发布于 2015-11-17 22:19:09
关于AJAX
让我们假设每个AJAX请求需要大约1秒的时间来处理。如果您在这样的forEach
循环中运行AJAX,那么您可能会认为10次操作需要大约10秒。
Time Action
0:00.00 Send Request 1
0:01.00 Receive Response 1 #(~1 second later)
0:01.00 Send Request 2
0:02.00 Receive Response 2
0:02.00 Send Request 3
0:03.00 Receive Response 3
...
但是,AJAX调用的工作方式与此不同。您几乎同时发送所有这10个请求。例如,
Time Action
0:00.00 Send Request 1
0:00.01 Send Request 2
0:00.02 Send Request 3 #(basically no difference from Request 1)
0:01.01 Receive Response 1 #(~1 second later)
0:01.15 Receive Response 3 #(received before Response 2)
0:04.01 Receive Response 2 #(received much later than Response 3)
...
几个关键点
如何了解更多信息
为了更好地了解发生了什么,您可以使用浏览器控制台的网络工具来查看发生了什么。在Google Chrome中,你可以点击[Control]-[Shift]-[J]
打开开发者控制台。有一个名为Network的选项卡,可以让您查看服务器回复的每个请求和响应。其他浏览器也会有类似的工具。
您还可以查看任何失败的响应。它们可能会显示调试信息、堆栈跟踪或您可以解决的特定服务器问题。
发布于 2015-11-17 21:59:58
我花了很长时间让ajax在Laravel 5.1中工作。使用contentType
和processData
,并像下面这样使用headers
参数是最终让它为我工作的神奇公式。忽略其中任何一个都会导致它失败。
<meta name="csrf-token" content="{{ csrf_token() }}" />
<script>
var token = $('meta[name="csrf-token"]').attr('content');
$.ajax({
type : 'POST',
url : '/api/insert',
data : {"text":txt, "lat": lat, "lng":lng, "title":i},
cache : false,
contentType : false,
processData : false,
headers : {'X-CSRF-TOKEN': token},
dataType : 'json',
success : function(ret) {
console.log(ret);
}
// ....
});
</script>
https://stackoverflow.com/questions/33758107
复制相似问题