Ajax - 500内部服务器错误

问题描述:

我想在工作中学习此项目的AJAX。我有一个网站载入病人正在服用的药物。Ajax - 500内部服务器错误

我以递归方式调用这个AJAX函数,以便它会追加一个包含单一药物和7天历史记录的新表格。我有问题让代码在FF和IE中执行。在铬合金中工作得很好。我不得不提醒显示xmlhttp.status,这是我得到了什么:

xmlhttp.status == 500(内部服务器错误 )。

我注释掉了我所有的递归,所以它被缩小到这个tid位的代码。 (x记录药物的数量,所以我知道何时停止)

function LoadMeds() 


    if (x == MaxMedCount) 
    { 
     document.getElementById("the_day").value = parseInt(document.getElementById("the_day").value)+7; 
    } 
    if (x == (MaxMedCount - 1)) 
    { 
     document.getElementById("x").value = x + 1; 
     show(); 
    } 
    else 
    { 

     if (window.XMLHttpRequest) 
     {// code for IE7+, Firefox, Chrome, Opera, Safari 
      xmlhttp=new XMLHttpRequest(); 
     } 
     else 
     {// code for IE6, IE5 
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
     xmlhttp.onreadystatechange=function() 
     { 
      try 
      {  
       if (xmlhttp.readyState==4 && xmlhttp.status==200) 
       {  
        var div = document.createElement('div'); 
        div.innerHTML= xmlhttp.responseText; 
        document.getElementById('MedTable').appendChild(div); 
        document.getElementById("the_med_").value = the_med_; 

       } 

      } 
      catch(e) 
      { 
       alert("Error"); 
      } 
     } 
     xmlhttp.open("GET","URL with variables passed",true); 
     xmlhttp.send();  
     document.getElementById("x").value = x + 1; 
    } 

如果需要更多代码,请让我知道。

500 (internal server error)意味着服务器端出了问题。这可能是几件事情,但我会首先验证URL和参数是否正确。此外,请确保处理请求的任何东西都将该请求视为GET而不是POST。

一个有用的方式来了解更多关于正在发生的事情是使用像Fiddler这样的工具,它可以让你看到所有的HTTP请求和响应,所以你可以看到你正在发送和服务器响应。

如果您没有令人信服的理由来编写自己的Ajax代码,那么使用处理Ajax交互的库会更好。 jQuery是一种选择。

+0

`此外,请确保处理请求的任何东西都希望将请求作为GET而不是POST' - 那么您如何使用jQuery.post()方法呢?如果我想写入数据库,我不应该作为POST发出Ajax请求 – Medorator 2014-03-21 05:33:32

+0

@buffer他的例子显示了`xmlhttp.open(“GET”,“带有变量的URL”,true);`,所以关于期待GET的服务器的评论是特定于他的代码的。如果您的服务器请求处理期望POST,请使用来自客户端的POST。 – 2014-03-25 21:06:05

这可能是您的SOAP调用的不正确参数;请查看'data:'json部分中的参数格式 - 这是您传递的有效内容 - 以JSON格式包装的参数和数据。

谷歌浏览器的调试工具栏有一些很好的工具来验证参数并查看错误信息 - 例如,从控制台选项卡开始,点击错误或点击网络选项卡。你会想查看邮件的标题,响应等等

取消对以下行:[System.Web.Script.Services.ScriptService]

服务将开始正常工作。

[WebService(Namespace = "http://tempuri.org/")] 


[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 


要允许此Web服务从脚本调用,使用ASP.NET AJAX ,去掉下面行的。

[System.Web.Script.Services.ScriptService] 

public class WebService : System.Web.Services.WebService 
{ 

有同样的问题,后来我想起,出于安全原因,远程访问您的网站/服务时,ASP不暴露整个错误或堆栈跟踪,同样不能够测试.asmx所以我远程登录服务器并监视我的开发工具,然后才得到臭名昭着的消息“无法加载文件或程序集'Newtonsoft.Json, Version=3.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'或其中一个dep ...”。

因此登录服务器并从那里进行调试。

我认为你的返回字符串数据非常长。所以JSON格式已经损坏。 应更改JSON数据的最大尺寸以这样的方式

打开Web.config文件并粘贴这些行到配置部分

<system.web.extensions> 
    <scripting> 
    <webServices> 
     <jsonSerialization maxJsonLength="50000000"/> 
    </webServices> 
    </scripting> 
</system.web.extensions> 

我定这样的错误改变的地方在routes.php文件路径,例如我有这样的事情:

Route::resource('Mensajes', 'MensajeriaController'); 
Route::get('Mensajes/modificar', '[email protected]stado'); 

,然后我把它像这样:

Route::get('Mensajes/modificar', '[email protected]'); 
Route::resource('Mensajes', 'MensajeriaController');