2015-10-19 77 views
0

我有一个REST API控制器配置如下。在按钮上单击“PlayersRegistration”,javascript中的更新函数被正确调用。但问题是DefaultController类中的PostPlayers方法从来没有在update函数中使用success:function(data)语句被调用。相反,当我通过检查元素检查浏览器中的控制台时,发现内部服务器错误500.我不知道什么是错的。AJAX查询不调用REST API控制器方法

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Net.Http; 
using System.Web.Http; 

namespace WebApplication2.Models 
{ 
    public class Default : ApiController 
    { 
    public string regID { get; set; } 
    public string firstName { get; set; } 
    public string lastName { get; set; } 
    public string teamName { get; set; } 
    public DateTime dateOfBirth { get; set; } 

    } 
} 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Net.Http; 
using System.Web.Http; 
using WebApplication2.Models; 
using System.IO; 
using System.Globalization; 
using System.Windows.Forms; 
namespace WebApplication2.Controllers 
{ 
public class DefaultController : ApiController 
{ 
    List<Default>players = new List<Default>(); 
    string path = Path.Combine(Directory.GetCurrentDirectory(), "\\players.txt"); 

    public void readFile() 
    { 
     string line; 
     StreamReader file = new StreamReader(path); 
     string[] data; 
     players.Clear(); 

     while ((line = file.ReadLine()) != null) 
     { 
      data = line.Split(','); 
      Default player = new Default(); 
      player.regID = data[0]; 
      player.firstName = data[1]; 
      player.lastName = data[2]; 
      player.teamName = data[3]; 
      player.dateOfBirth = DateTime.ParseExact(data[4], 
       "yyyy-mm-dd", CultureInfo.InvariantCulture); 
      players.Add(player); 
     } 
     file.Close(); 
    } 

    public IHttpActionResult PostPlayers(Default playerInfo) 
    { 
     readFile(); 
     MessageBox.Show("5"); 
     var player = players.FirstOrDefault((p) => p.regID == playerInfo.regID); 
     if (player != null) 
     { 
      players.Remove(player); 
      players.Add(playerInfo); 
     } 

     else 
     { 
      players.Add(playerInfo); 
     } 

     using (StreamWriter sw = File.CreateText(path)) 
     { 
      for (int i = 0; i < players.Count(); i++) 
       sw.WriteLine(Players_Display(players[i]), Environment.NewLine); 
      sw.Close(); 
     } 

     return Ok(players); 
    } 

    public string Players_Display(Default player) 
    { 
     string data = player.regID + "," + player.firstName + "," + player.lastName + "," + player.teamName + "," + player.dateOfBirth.ToString("yyyy-mm-dd").Substring(0,10); 
     return data; 
    } 

    } 
} 

的HTML代码是如下

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title></title> 
</head> 
<body> 
<div> 
    <h2> All Players</h2> 
    <ul id="players"></ul> 

</div> 

<div> 
    <br /> 
    <h2> Search or Delete </h2> 
    <select id="options_for_search_delete"> 
     <option value="id">ID</option> 
     <option value="name">Name</option> 
    </select> 
    <input type="text" id="data" size="5" /> 
    <input type="button" value="Search" onclick="search()" /> 
    <input type="button" value="Delete" onclick="delet()" /> 
    <br /> 
    <p id="result_players" /><br> 
    <h2>Player Registration</h2> 
    <br /> 
    <form> 
     <label for="id"> RegistrationID:</label><br> 
     <input type="text" id="regID" name="regID"> 
     <br /> 
     <label for="firstName">First Name:</label><br> 
     <input type="text" id="firstName" name="firstName"> 
     <br /> 
     <label for="lastName">Last Name:</label><br> 
     <input type="text" id="lastName" name="lastName"> 
     <br /> 
     <label for="teamName">Team Name:</label><br> 
     <input type="text" id="teamName" name="teamName"> 
     <br /> 
     <label for="dateofbirth">Date Of Birth:</label><br> 
     <input type="text" id="dateOfBirth" name="dateOfBirth"> 
     <br /> 
     <input type="button" id="post" value="Player Registration" onclick="update();" /> 
     <p id="data_validation"></p> 
    </form> 

</div> 

<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.0.3.min.js"></script> 
<script> 

    var uri = 'api/Default'; 

    $(document).ready(function() { 

     $.ajax({ 
      type: 'GET', 
      url: uri, 
      success: function (data) { 
       displayData(data); 
      } 
     }) 
    }) 

    function format(item) { 
     return item.regID + "," + item.firstName + " " + item.lastName + "," + item.teamName + "," + item.dateOfBirth.toString().substring(0, 10); 
    } 

    function displayData(data) { 
     $('ul').empty(); 
     $.each(data, function (key, item) { 
      $('<li>', { text: format(item) }).appendTo($('#players')); 
     }); 
    } 



    function update() { 

     $('#result_players').text(""); 
     $('#data_validation').text(""); 
     if ($('#regID').val() == "" || $('#firstName').val() == "" || $('#lastName').val() == "" || $('#teamName').val() == "" || $('#dateofbirth').val() == "") { 
      $('#data_validation').text("Input Boxes Cannot be Empty"); 
     } 
     else { 
      $.ajax({ 
       type: 'POST', 
       url: uri, 
       data: String($('form').serialize()), 
       success: function (data) { 
        displayData(data); 
       }, 
       error: function (jqXHR, textStatus, err) { 
        alert(err); 
       } 
      }) 
     } 
    } 
    </script> 
</body> 
</html> 
+0

请检查服务器端日志。由于500是服务器端错误。 –

回答

0

“500内部服务器错误”是指“服务器遇到阻止其完成请求的意外情况。

所以,你的JavaScript可能会相当好,但服务器端未能执行请求,并且从不会调用成功回调。

您必须检查服务器的日志,以找出根本原因可能的线索。

+0

你能为此提出一些建议吗?我是Web开发的新手。 – wittyenggs