Ajax - 500内部服务器错误

时间:2011-01-25 03:06:04

标签: javascript ajax xmlhttprequest

我正在努力为这个项目学习AJAX。我有一个网站,负载患者正在服用的药物。

我以递归方式调用此AJAX函数,以便它附加一个包含单一药物和7天历史记录的新表。我在让代码在FF和IE中执行时遇到问题。铬合金完美无缺。我有警告显示xmlhttp.status,这就是我得到的:

  

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

我注释掉了所有的递归,因此它缩小到了这个代码。 (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;
  } 

如果需要更多代码,请告诉我。

8 个答案:

答案 0 :(得分:50)

500 (internal server error)表示服务器端出现问题。这可能是几件事,但我首先要验证URL和参数是否正确。此外,请确保处理请求的任何内容都期望请求为GET而不是POST。

了解更多有关正在发生的事情的一种有用方法是使用Fiddler这样的工具,它可以让您查看所有HTTP请求和响应,这样您就可以准确地看到您发送的内容以及服务器正在响应的内容

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

答案 1 :(得分:10)

我认为你的返回字符串数据很长。所以JSON格式已经损坏。 您应该以这种方式更改JSON数据的最大大小:

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

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

答案 2 :(得分:6)

这可能是您的SOAP调用的错误参数;查看'data:'json部分中参数的格式 - 这是您传递的有效负载 - 以JSON格式包装的参数和数据。

Google Chrome的调试工具栏有一些很好的工具来验证参数并查看错误消息 - 例如,从控制台选项卡开始,然后单击错误的URL或单击网络选项卡。您需要查看邮件的标题,响应等...

答案 3 :(得分:2)

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

服务将开始正常运作。

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


 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]


  

允许使用ASP.NET从脚本调用此Web Service   AJAX,取消注释以下行。

[System.Web.Script.Services.ScriptService]

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

答案 4 :(得分:1)

有同样的问题,那么我记得,出于安全原因,ASP在远程访问您的站点/服务时不会暴露整个错误或堆栈跟踪,就像无法测试.asmx一样远程Web服务,所以我远程进入服务器并监视我的开发工具,然后才得到臭名昭着的消息&#34;无法加载文件或程序集'Newtonsoft.Json, Version=3.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'或其中一个dep ...&# 34。

所以登录服务器并从那里进行调试。

答案 5 :(得分:0)

我修改了一个像这样的错误来改变routes.php中路由的位置,例如我有这样的东西:

Route::resource('Mensajes', 'MensajeriaController');
Route::get('Mensajes/modificar', 'MensajeriaController@modificarEstado');

然后我这样说:

Route::get('Mensajes/modificar', 'MensajeriaController@modificarEstado');
Route::resource('Mensajes', 'MensajeriaController');

答案 6 :(得分:0)

我有同样的错误。事实证明,原因是后端方法期望不同的json数据。在我的Ajax调用中我有这样的事情:

$.ajax({
        async: false,
        type: "POST",
        url: "http://13.82.13.196/api.aspx/PostAjax",
        data: '{"url":"test"}',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
    });

现在在我的WebMethod中,在我的C#后端代码中,我已经声明了我的端点:

public static string PostAjax(AjaxSettings settings)

宣布AjaxSettings的地方:

public class AjaxSettings
{
    public string url { get; set; }
}

问题是我的ajax调用和后端端点之间的映射不一样。一旦我将ajax调用改为以下内容,一切都运行良好!

var data ='{"url":"test"}';    
$.ajax({
    async: false,
    type: "POST",
    url: "http://13.82.13.196/api.aspx/PostAjax",
    data: '{"settings":'+data+'}',
    contentType: "application/json; charset=utf-8",
    dataType: "json"
});

我必须更改Ajax调用中的数据变量才能完全匹配方法签名。

答案 7 :(得分:0)

必须在C#

中的帖子behavior: JsonRequestBehavior.AllowGet中使用Json Return