尝试使用jquery ajax调用将一些JSON数据发送到服务器。它似乎不是数据发布,因为当我尝试在代码隐藏文件中解析它时会抛出错误。搜索周围,但答案没有帮助解决我的问题。任何指导都将不胜感激。
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<script type="text/javascript">
$.ajax({
url: 'Default2.aspx',
type: 'post',
async: false,
contentType: 'application/json; charset=utf-8',
//data: "'"+batchtable+"'",
data: JSON.stringify({"a":"1", "b": "2"}),
dataType: 'json',
processData: false,
success: function (result) {
alert('success');
},
error: function (result) {
alert('failed');
}
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
</div>
</form>
</body>
</html>
这是.cs文件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Diagnostics;
using System.Web.Script.Serialization;
public partial class Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
var jsonString = String.Empty;
HttpContext context = HttpContext.Current;
context.Request.InputStream.Position = 0;
using (var inputStream = new StreamReader(context.Request.InputStream))
{
jsonString = inputStream.ReadToEnd();
}
RootObject userinput = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<RootObject>(jsonString);
}
}
public class RootObject
{
public string a { get; set; }
public string b { get; set; }
}
我得到的错误信息是:
Invalid JSON primitive: __VIEWSTATE.
答案 0 :(得分:2)
对于ajax调用不要从服务器端调用event.you需要从javascript / jquery调用。
你需要定义一个服务器端webmethod,你可以从jquery / javascript调用该方法。这是一个演示。工作良好。可能对你有帮助。
<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
<script language="javascript" type="text/javascript">
$(document).ready(function () {
$("#btnResult").click(function () {
var name = $("#txtNameTextBox").val();
$.ajax({
type: "POST",
url: "Default.aspx/GetDate",
data: "{name:'" + name + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
//alert(data.d);
$("#Result").text(data.d);
var val = data.d;
val = val.split("~");
var name = val[0];
var time = val[1];
var date = val[2];
var tempdate = date.split(":");
var finaldate = tempdate[1];
$("#txtDateToDisplay").val(finaldate);
$("#txtDateToDisplay2").val(finaldate);
},
error: function () { alert(arguments[2]); }
});
});
});
</script>
这是HTML
<h2>
Call Server side Function From JaxaScript AJAX Call ASP.NET!
</h2>
<br />
<br />
<div>
Name : <input type="text" id="txtNameTextBox" /><br/><br/>
Date : <input type="text" id="txtDateToDisplay" /><br/><br/>
Date : <input type="text" id="txtDateToDisplay2" />
<br />
<br />
<p id="Result">Message : </p>
<input type="button" id="btnResult" value="Click here for the time"/>
</div>
这是您的服务器端代码
/// <summary>
/// ===========================================
/// This is the WebMethod where ajax call happens.
//=============================================
/// </summary>
/// <param name="name">the data sent from ajax call
/// - here a string only(name of a user)</param>
/// <returns>a string with json format</returns>
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static string GetDate(string name)
{
if (name == "")
{
return "No Parcel Available";
}
else
{
name = "Name : " + name + "~" +
"Current Time : " + DateTime.Now.ToLongTimeString()
+ "~" + "Date : " + DateTime.Now.ToShortDateString();
}
return name;
}
希望它会对你有所帮助。
答案 1 :(得分:1)
您需要使用JavaScript / jQuery来调用服务器端端点。 ASP.NET AJAX页面方法提供托管在页面内部的Web方法,但是static
并且不是页面实例的一部分,因此您可以通过客户端脚本异步调用它们,如下所示: / p>
标记:
<div id="Results"></div>
$(document).ready(function() {
$.ajax({
type: "POST",
url: "YourPage.aspx/GetGreeting",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(result) {
// Put greeting into DIV
$('#Results').text(result.d);
}
});
});
代码隐藏:
[WebMethod]
public static string GetGreeting()
{
return "Hello world!";
}
注意:上面的示例使用客户端(通过jQuery)向服务器询问问候语(string
),该问候语由ASP.NET AJAX页面方法自动进行JSON编码。然后{j} result
函数的success
处理程序处理.ajax()
,并从返回的string
引用中提取实际的.d
值{1}}对象。