首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel 5.1 Ajax代码500

Laravel 5.1 Ajax代码500
EN

Stack Overflow用户
提问于 2015-11-17 21:25:17
回答 2查看 183关注 0票数 3

在Laravel 5.1中,我的ajax调用有问题。如果我有一个序列ajax调用(例如10),Laravel会随机地响应我一个错误代码500,并说“哇,看起来好像出了什么问题。”

我的ajaxcall是:

代码语言:javascript
运行
复制
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上有问题

EN

回答 2

Stack Overflow用户

发布于 2015-11-17 22:19:09

关于AJAX

让我们假设每个AJAX请求需要大约1秒的时间来处理。如果您在这样的forEach循环中运行AJAX,那么您可能会认为10次操作需要大约10秒。

代码语言:javascript
运行
复制
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个请求。例如,

代码语言:javascript
运行
复制
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的选项卡,可以让您查看服务器回复的每个请求和响应。其他浏览器也会有类似的工具。

您还可以查看任何失败的响应。它们可能会显示调试信息、堆栈跟踪或您可以解决的特定服务器问题。

票数 1
EN

Stack Overflow用户

发布于 2015-11-17 21:59:58

我花了很长时间让ajax在Laravel 5.1中工作。使用contentTypeprocessData,并像下面这样使用headers参数是最终让它为我工作的神奇公式。忽略其中任何一个都会导致它失败。

代码语言:javascript
运行
复制
<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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33758107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档