在JS中使用C#POST获取数据

时间:2014-10-22 14:08:44

标签: javascript c# webpage

我需要得到以下链接的函数resultado2()的结果字符串:

http://barion.inapi.cl/BuscaBiblio/proceso.js

作为第一步,我编写了以下代码:

            string url = "http://barion.inapi.cl/BuscaBiblio/inicio.php";
            Uri uri = new Uri(url);

            HttpWebRequest request = HttpWebRequest.Create(url) as System.Net.HttpWebRequest;
            request.ContentType = "application/x-www-form-urlencoded";
            request.Method = "POST";
            string buscar = "solicitud=" + 750 + "&registro=&descripcion=&solicitante=&d=1&m=1&y=" + 2003 + "&d2=31&m2=12&y2=" + 2003; // +"&nocache=0.1821407969109714";
            byte[] data = Encoding.UTF8.GetBytes(buscar);
            request.ContentLength = data.Length;

            using (var stream = request.GetRequestStream())
            {
                stream.Write(data, 0, data.Length);
            }

            WebResponse response = request.GetResponse();
            string responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

直到这里,一切都很好。 ' responseString'给我#ok ## 1',表示到目前为止有一个结果。

然而,我被困在函数resultado2()返回返回HTML代码(包括所需表)的字符串的位置。 我试过这段代码:

            url = "http://barion.inapi.cl/BuscaBiblio/listado.php";

            uri = new Uri(url);
            request = HttpWebRequest.Create(url) as System.Net.HttpWebRequest;
            request.ContentType = "application/x-www-form-urlencoded";
            request.Method = "POST";
            postData = "st=0&total=1";

            data = Encoding.UTF8.GetBytes(postData);
            request.ContentLength = data.Length;

            using (var stream = request.GetRequestStream())
            {
                stream.Write(data, 0, data.Length);
            }

            response = request.GetResponse();
            responseString = new StreamReade

但它给了我一个500错误。 但是,在尝试使用Chrome的调试模式时,我显然可以检查' r'

的价值。

function resultado2() {
    if(peticion_http.readyState == READY_STATE_COMPLETE) {
        if(peticion_http.status == 200) {
            mm = document.getElementById("resultado");
            var r = peticion_http.responseText;
            mm.innerHTML = r;
        }
    }
}

有什么想法吗? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

为了澄清,您是否尝试将数据从客户端提交到服务器端?如果是这样,你的方法有点奇怪。您可以简单地执行以下操作:

function Calculate() {
     var order = new Array();
     var convertedOrder;

     // Do whatever you need or want to validate.

     // BuildOrder a function to build our object cleanly.
     order.push(BuildOrder(product, quantity, price, shipping, other, location, tax)); 

     // Convert object to Json
     convertedOrder = JSON.stringify(order);

    // The array and converting data into JSON would be wrapped in a loop.

   $.ajax({
         url: '<%= Page.ResolveUrl("~/Services/Order.aspx") %>',
         data: { Order: convertedOrder },
         type: 'POST',

         success: function (order) {
              var result = JSON.parse(order);
              console.log(result[0].Total); // Returned data
         }
}

以上是相当原始的,但你至少得到了这个想法。然后在C#的服务器上,执行object将存储您传递的所有数据:

// Data to be read and parsed.
public class Returnable
{
    public int Product { get; set; }
    public int Quantity { get; set; }
    public decimal Price { get; set; }        
    public decimal Shipping { get; set; }
    public decimal Other { get; set; }
    public string Location { get; set; }
    public decimal Tax { get; set; }
}

// Data to Send Back:
public class SendInformation
{
     public string Tax { get; set; }
}

然后在您.aspx的代码中,您可以在Page_Load中执行此操作:

 JavaScriptSerializer serializer = new JavaScriptSerializer();
 List<Returnable> deserialize = serializer.Deserialize<List<Returnable>>(order);
 foreach(Returnable returnable in deserialize)
 {
     // Iterate through all of your passed data.
 }

 List<SendInformation> responseObject = new List<SendInformation>();
 responseObject.Add(new SendInformation() { Total = "value", Tax = "value" });
 string response = serializer.Serialize(responseObject);
 Response.Write(response);
 Response.End();

这会将数据从客户端推送到服务器,然后将服务器推回到客户端,以便您可以使用数据。甚至可以在新功能和其他领域中使用它。

希望这有帮助。