Я пытаюсь связать имя пользователя из базы данных, но некоторые из них показывают его странную ошибку.
Файл ASPX
<script type="text/javascript">
$(document).ready(function () {
SearchText();
});
function SearchText() {
$(".autosuggest").autocomplete({
source: function (request, response) {
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "Default.aspx/GetAutoCompleteData",
data: "{'username':'" + document.getElementById('txtSearch').value + "'}",
dataType: "json",
success: function (data) {
response(data.d);
},
error: function (result) {
alert('error');
}
});
}
});
}
Код позади
<ScriptMethod(ResponseFormat:=ResponseFormat.Json)> _
<WebMethod()> _
Public shared Function GetAutoCompleteData(ByVal username As String) As List(Of String)
Dim result As New List(Of String)()
Using con As New SqlConnection("Data Source=foo; Initial Catalog=db;user id=foo; password=foo;")
Using cmd As New SqlCommand("select cust_name from customers where cust_name LIKE '%'+@SearchText+'%'", con)
con.Open()
cmd.Parameters.AddWithValue("@SearchText", username)
Dim dr As SqlDataReader = cmd.ExecuteReader()
While dr.Read()
result.Add(dr("cust_name").ToString())
End While
Return result
End Using
End Using
End Function
Я попытался проверить в firebug. Net XHR. На вкладке "Post" это показывает
JSON
username
"j"
Source
{'username':'j'}
На вкладке "Ответ" показано:
Server Error in '/' Application.
Unknown web method GetAutoCompleteData.
Parameter name: methodName
Трассировки стека:
[ArgumentException: Unknown web method GetAutoCompleteData.
Parameter name: methodName]
System.Web.Script.Services.WebServiceData.GetMethodData(String methodName) +178
System.Web.Handlers.ScriptModule.OnPostAcquireRequestState(Object sender, EventArgs eventArgs) +204
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +136
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +69
Обратите внимание, что тот же самый код работает на локальном компьютере, но не на рабочем сервере. В консоли его показ
"NetworkError: 500 Internal Server Error - http://foo.com/Default.aspx/GetAutoCompleteData"
Я не могу понять, где я ошибаюсь. Он показывает предупреждение об ошибке из вышеуказанного javascript. Может ли кто-нибудь помочь?
Ниже мой рабочий код, используйте его для целей сравнения, он действительно работает и для меня, это может вам помочь. Проверьте формат данных в ajax.
$( "#txt_item").autocomplete({
delay: 10,
minLength: 1,
source: function(request, response) {
$("#txt_item").addClass("ui-autocomplete-loading");
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "cms/cms_gallery.aspx/GetAutoCompleteData",
data: '{term: "' + $("#txt_item").val() + '" }',
dataType: "json",
success: function(data) {
response(data.d);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
$("#txt_item").removeClass("ui-autocomplete-loading");
alert(textStatus);
},
search: function () {
$("#txt_item").addClass("ui-autocomplete-loading");
},
response: function () {
$("#txt_item").removeClass("ui-autocomplete-loading");
}
});
}
});
Кодекс:
[WebMethod]
public static List<string> GetAutoCompleteData(string term)
{
List<string> result = new List<string>();
OdbcConnection conn = new OdbcConnection(DB.DatabaseConnString());
string query = "SELECT * from gallery WHERE (unique_no LIKE '%" + My_Helper.FormatStringforDB(term) + "%') limit 5;";
if (conn.State == ConnectionState.Open)
conn.Close();
conn.Open();
OdbcDataReader dataReader = new OdbcCommand(query, conn).ExecuteReader();
if ((dataReader != null) && (dataReader.HasRows))
{
while (dataReader.Read())
{
result.Add(dataReader["unique_no"].ToString());
}
}
dataReader.Close();
return result;
}
GetAutoCompleteData
наGetAutoCompleteData
сервере? Это написано правильно?