2011-01-25 196 views
23

我想在工作中學習此項目的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; 
    } 

如果需要更多代碼,請讓我知道。

回答

43

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

6

這可能是您的SOAP調用的不正確參數;請查看'data:'json部分中的參數格式 - 這是您傳遞的有效內容 - 以JSON格式包裝的參數和數據。

谷歌瀏覽器的調試工具欄有一些很好的工具來驗證參數並查看錯誤信息 - 例如,從控制檯選項卡開始,點擊錯誤或點擊網絡選項卡。你會想查看郵件的標題,響應等等

1

取消對以下行:[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 
{ 
1

有同樣的問題,後來我想起,出於安全原因,遠程訪問您的網站/服務時,ASP不暴露整個錯誤或堆棧跟蹤,同樣不能夠測試.asmx所以我遠程登錄服務器並監視我的開發工具,然後纔得到臭名昭着的消息「無法加載文件或程序集'Newtonsoft.Json, Version=3.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'或其中一個dep ...」。

因此登錄服務器並從那裏進行調試。

8

我認爲你的返回字符串數據非常長。所以JSON格式已經損壞。 應更改JSON數據的最大尺寸以這樣的方式

打開Web.config文件並粘貼這些行到配置部分

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

我定這樣的錯誤改變的地方在routes.php文件路徑,例如我有這樣的事情:

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

,然後我把它像這樣:

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