Веб-служба не возвращает данные в вызов AJAX
Мне было поручено создать веб-сайт HTML5. Веб-сайт должен будет подключиться к базе данных MS SQL и передать данные из нее на веб-сайт для просмотра пользователем. Мне нужно создать веб-службу, которая подключается к базе данных SQL. Методы, которые я намеревался передать на веб-страницу, чтобы заполнить поле списка и использовать его для заполнения графика данными. Я могу видеть данные с сервера IIS и веб-сайта WSDL. Я могу видеть данные с помощью SOAPUI, если я укажу его на веб-адрес. Однако, когда я запускаю AJAX-скрипт в Javascript, он не возвращает данные. Я озадачен.
Я прикрепил код веб-сервиса, а также код, который я использую в Javascript для вызова веб-службы.
Что я уже пробовал:
using System; using System.Collections.Generic; using System.Web; using System.Data; using System.Web.Services; using System.Data.SqlClient; using System.Web.Script.Serialization; [WebService(Namespace = "http://tempuri.org/", Description = "Database Connection Service", Name = "UnivariateWebService")] //[System.ComponentModel.ToolboxItem(false)] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] // 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 Service : System.Web.Services.WebService { public Service () { //Uncomment the following line if using designed components //InitializeComponent(); } [WebMethod] public DataSet GetBatchData() { //Modify this connection string to use your SQL Server and log on information. var con = new SqlConnection("server=DEVELOPMENT-SER;uid=******;pwd=******;database=UnivariateRuns"); //Open the Customers table to serve as the parent table. var daRunSet = new SqlDataAdapter("Select * From dbo.Products Order By product desc", con); //Create a client-side DataSet to hold the Customers and Orders tables. var ds = new DataSet(); //Explicitly open the connection to allow explicit closing. con.Open(); //Fill the DataSet with the Customers table and the Orders table. daRunSet.Fill(ds, "Batches"); //string myJsonString = (new JavaScriptSerializer()).Serialize(ds); // might need to phase the dataset as a string //Explicitly close the connection - do not wait for garbage collection. con.Close(); //Return the DataSet to the client. return ds; } [WebMethod] public DataSet GetSampleData(string product) { //Modify this connection string to use your SQL Server and log on information. var con = new SqlConnection("server=DEVELOPMENT-SER;uid=******;pwd=******;database=UnivariateRuns"); //Open the Customers table to serve as the parent table. var daRunSet = new SqlDataAdapter("Select * From dbo.RunSetData where product like '%" + product + "%' Order by product desc", con); //Create a client-side DataSet to hold the Customers and Orders tables. var ds=new DataSet(); //Explicitly open the connection to allow explicit closing. con.Open(); //Fill the DataSet with the Customers table and the Orders table. daRunSet.Fill(ds, "RunSet"); //daOrders.Fill(ds, "Orders"); //Explicitly close the connection - do not wait for garbage collection. con.Close(); //Return the DataSet to the client. return ds; } } Javascript Function: function DataConnect() { $.ajax({ type: 'GET', url: 'http://192.168.1.103/Web%20Service/Service.asmx/GetBatchData', dataType: 'json', contentType: 'application/json;charset=utf-8', success: function(responce) { var names = response.d; alert(names); }, failure: function(error) { alert(response.d); } }); }; // How do I get the data passed to the Plot Array from the AJAX call?
Richard Deeming
var daRunSet = new SqlDataAdapter("Select * From dbo.RunSetData where product like '%" + product + "%' Order by product desc", con);
Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]
var daRunSet = new SqlDataAdapter("Select * From dbo.RunSetData where product like @product Order by product desc", con); daRunSet.SelectCommand.Parameters.AddWithValue("@product", "%" + product + "%");
ZurdoDev
Я не думаю, что JavaScript может что - то сделать с набором данных. Вам нужно будет jsonify его или вернуть в виде строки.
[no name]
Таким образом, я смог преобразовать один из моих наборов данных в JSON. Но другой набор данных, который использует этот параметр, дает мне систему.Ошибка OutOfMemoryException. Я думаю, что это может быть связано с объемом данных, возвращаемых этим конкретным запросом.