2017-11-11 137 views
1

我是新来的Web应用程序开发我想做一个登录页面,并从本地数据库使用JavaScript获取用户的数据。但是我很难找到我做错事的地方。下面是我的javascript代码Javascript从Web服务获取数据

$(document).ready(function() { 

$("#log-in-form").on("submit", function (e) { 
    e.preventDefault(); 

    var username = $(this).find("input[type=text]").val(); 
    var password = $(this).find("input[type=password]").val(); 

    Authentication(username, password); 

}); 

function Authentication(username,password){ 
    $.ajax({ 

     type: "GET", 
     url: "../Web Service/LogIn.asmx/get_uinfos", 
     data: "{'domain':" + username + "', 'accountpassword':'" + password + "'}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (response) { 
      var result = response.d; 
      var length = response.length; 

      $.each(result, function (index, data) { 
       var alias = data.alias; 
       window.localStorage.replace("Main.aspx"); 
      }); 
     }, 
     error: function() { 
      alert('Function Error "get_uinfos"') 
     } 
    }); 
} 



}); 

,我使用Web服务连接到本地服务器使用这些代码

using Wishlist_2017; 
using System; 
using System.Collections.Generic; 
using System.Data; 
using System.Data.SqlClient; 
using System.IO; 
using System.Linq; 
using System.Security.Cryptography; 
using System.Text; 
using System.Web.Script.Services; 
using System.Web.Services; 


namespace Wishlist_2017.Web_Service 
{ 
    /// <summary> 
    /// Summary description for LogIn 
    /// </summary> 
    [WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [System.ComponentModel.ToolboxItem(false)] 
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService] 
    public class LogIn : System.Web.Services.WebService 
    { 
     dbconn dbcon = new dbconn(); 

     public class uinfos 
     { 
      public int id; 
      public string alias; 
      public string monito; 
     } 

     static List<uinfos> _get_uinfos = new List<uinfos> { }; 
     [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
     [WebMethod] 
     public List<uinfos> get_uinfos(string domain, string accountpassword) 
     { 
      DataTable table = null; 
      SqlCommand cmd = new SqlCommand(); 

      cmd.CommandText = "Retrieve_UserInfo"; 

      cmd.Parameters.AddWithValue("@Domain", domain); 
      cmd.Parameters.AddWithValue("@Password", accountpassword); 

      cmd.CommandType = System.Data.CommandType.StoredProcedure; 
      table = this.dbcon.ExecuteDataTable(cmd); 

      _get_uinfos.Clear(); 

      foreach (DataRow row in table.Rows) 
      { 
       uinfos _list = new uinfos(); 

       _list.id = Convert.ToInt32(row["id"]); 
       _list.alias = row["Alias"].ToString(); 
       _list.monito = row["Monito"].ToString(); 

       _get_uinfos.Add(_list); 
      } 

      return _get_uinfos; 
     } 
    } 
} 

但在试图填补我遇到这个错误的用户名和密码登录控制台

enter image description here

有人可以帮到哪里寻找它我们将不胜感激

EDIT 1:

这是类

using System; 
using System.Collections.Generic; 
using System.Configuration; 
using System.Data; 
using System.Data.SqlClient; 
using System.Linq; 
using System.Web; 

namespace Wishlist_2017 
{ 
    public class dbconn 
    { 
     string objConn = ConfigurationManager.ConnectionStrings["Server"].ToString(); 

     public dbconn() 
     { 
      // 
      // TODO: Add constructor logic here 
      // 
     } 

     public DataTable ExecuteDataTable(SqlCommand cmd) 
     { 
      DataTable dt = new DataTable(); 

      using (SqlConnection cn = new SqlConnection(objConn)) 
      { 
       try 
       { 
        cn.Open(); 
        cmd.Connection = cn; 
        cmd.CommandTimeout = 1000; 

        SqlDataAdapter da = new SqlDataAdapter(cmd); 

        da.Fill(dt); 
       } 
       catch (Exception ex) 
       { 
        throw ex; 
       } 
       finally 
       { 
        if (cn.State != System.Data.ConnectionState.Closed) 
         cn.Close(); 
       } 

       return dt; 
      } 
     } 

     public void ExecuteNonQuery(SqlCommand cmd) 
     { 
      using (SqlConnection cn = new SqlConnection(objConn)) 
      { 
       try 
       { 
        cn.Open(); 
        cmd.Connection = cn; 
        cmd.CommandTimeout = 1000; 
        cmd.ExecuteNonQuery(); 
       } 
       catch (Exception ex) 
       { 
        throw ex; 
       } 
       finally 
       { 
        if (cn.State != System.Data.ConnectionState.Closed) 
         cn.Close(); 
       } 
      } 
     } 


     public object ExecuteScalar(SqlCommand cmd) 
     { 
      object result = null; 

      using (SqlConnection cn = new SqlConnection(objConn)) 
      { 
       try 
       { 
        cn.Open(); 
        cmd.Connection = cn; 
        cmd.CommandTimeout = 1000; 
        result = cmd.ExecuteScalar(); 
       } 
       catch (Exception ex) 
       { 
        throw ex; 
       } 
       finally 
       { 
        if (cn.State != System.Data.ConnectionState.Closed) 
         cn.Close(); 
       } 
      } 

      return result; 
     } 
    } 
    } 

连接字符串在我的web.config中定义服务器的代码

编辑2:

这是连接字符串在我的web.config

<connectionStrings> 
    <add name="Server" connectionString="Data Source=(LocalDB)\ArnServer; initial Catalog=Wishlist; uid=sa; [email protected]!; Asynchronous Processing=true" providerName="System.Data.SqlClient"/> 
</connectionStrings> 
+1

你可以包括你的服务器代码的类定义是什么?另外,很高兴看到你正在使用SQL参数考虑你是新的web开发:) – James

+0

@詹姆斯请参阅编辑。你是这个意思吗?谢谢,但我无法完成工作。 –

+0

你的'LogIn.asmx.cs'中有什么? –

回答

1

这是一个棘手的一个。我花了一些时间才意识到这个问题。该错误表示无法创建Wishlist_2017.Web_Service.LogIn的实例。你提供的文件似乎表明它在那里它应该是和文件似乎没问题。

但是,在构造函数上下文中,有这样的调用:dbconn dbcon = new dbconn();。如果那个失败了,它可能会导致类型创建失败,但不是非常具体。

进一步分析,似乎dbconn文件具有初始化连接类似的方式:

string objConn = ConfigurationManager.ConnectionStrings["Server"].ToString(); 

如果一个出现故障,dbconn创建将失败,LogIn也将随之失效。看起来连接字符串有另一个名字,或者有一些配置无效。

尝试查看是否从dbconn中删除objConn初始化解决了类型创建问题。

+1

同意,命名空间看起来不错,只有防止类实例化的东西才是'web.config'中的'Server'连接字符串。 – James

+0

这就是我的想法:) @James –

+0

我尝试使用我的web.config上的凭据,但似乎我的凭据是正确的。请参阅我的帖子上的编辑 –

-2

永远不要手动创建json。与使用任何您使用的语言的json序列化程序相比,它更耗时且更容易出错。

由于不正确的引号,您正在创建的内容无效!

的物体上使用,而不是JSON.stringify()

data: JSON.stringify({'domain': username , 'accountpassword': password }), 
+0

这不是问题。您正在解决另一个问题(并且如您所见,复制已删除的答案)。 –

+0

@PatrickHofman必须具有有效的JSON才能开始。删除的答案仍然使用无效的引号。也许还有其他后端问题,但至少有有效的输入可以帮助 – charlietfl

0

非常微妙的问题,但您的连接字符串行是问题,即

string objConn = ConfigurationManager.ConnectionStrings["Server"].ToString(); 

ConnectionStrings['xxx']返回一个对象,而不是字符串本身,你想

string objConn = ConfigurationManager.ConnectionStrings["Server"].ConnectionString; 
+0

的确如此,但这会再现另一个错误,就像问题中的错误一样。 –

+0

@PatrickHofman认为这确实解决了问题中的问题,除非我错过了另一个错误?我只能看到一个。 – James

+0

'ToString'不会让类的实例化失败。它仍然重现一个字符串,尽管是无效的。稍后,由于无效的连接字符串,它会失败,但是在创建类之后很长时间。 –