共享主机上的服务器在我的机器上运行正常时,在POST请求上返回500服务器错误

时间:2019-02-12 19:39:46

标签: php ajax laravel asynchronous server

我刚刚实现了一个调用POST方法的AJAX请求,并将其添加到循环中以具有多个响应。在我的本地主机上的机器上,它运行良好,但是当我将其托管在Bluehost共享主机上时,使用PHP 7.2时,某些请求的响应正常(200),而其他服务器的错误(500)。

这是我的view.blade.php

 for(var i = 0; i < 10 ; i++){
   $.ajax({
     url:'/download',
     method: 'POST',
     data: formData,
     success:function(data){
        if(data['status'] == '0') {alert('SUCCESS FOR ' + i);}
        else {alert('ERROR FOR ' + i);}
     }
   });
}

这是我的MainController.php

function download(Request $request){
   //DO STUFF
   return response()->json(['status'=>'0']); //return '1' if success and '0' if failure
}

任何帮助将不胜感激吗?

1 个答案:

答案 0 :(得分:0)

我怀疑这与ajax调用的异步性质有关。 Localhost可能传输速度很快,因此数据一次只能移动一个。在您的共享主机上,可能需要花费更长的时间,从而弄乱了某些东西。很有可能是可变范围。我们看到您在响应中要求ii可能不是您的方法所期望的。没有更多信息很难说,但是如果这就是问题...:

解决范围问题的一种可能更好的方法是为每个ajax函数提供其自己的变量i的副本,因此我们始终知道以前的i应该是并且应该用于每个AJAX调用。

类似的事情可能会有所帮助:

for (i = 0; i <= 10; i ++)
{
  $.ajax(
  {
     method: 'POST',
     url:'/download',
     loopI: i, // Capture the current value of 'i'.
     success: function(data)
     {
        i = this.loopI; // your specific scoped i
      // ETC

您也可以在ajax中使用简单的async: false,进行测试,但是我可能会使用上面更清晰的解决方案作为永久解决方案。