我使用{{1}从脚本发送一个复杂的字符串(它是style
属性,ID
和label text
)的组合}。我在类似的问题上经历了几个问题。但也许我无法理解我在哪里弄错了。
这是我正在使用的脚本:
$.ajax()
在C#中,我通过以下方式访问它:
$(".btnSaveStyle").click(function (e) {
var comp1Style = "";
var comp2Style = "";
$(".box").children(".comp1").each(function () {
var style = $(this).attr('style');
var title = $(this).text();
var componentClass = $(this).attr('class');
comp1Style = comp1Style + style + "#" + componentClass + "#" + title + "$";
});
alert(comp1Style); //I get the style here
$.ajax({
type: "POST",
async: true,
url: 'AjaxRecieveStyle.aspx/GetStyle',
data: comp1Style
});
现在 :
1):我应该使用JSON对象传递数据吗?
或
2):请告诉我这里我做错了什么?
答案 0 :(得分:1)
1)是的,最好使用JSON发送数据 - 我的意思是,当一个人从现在开始查看该代码时,会更容易理解发生了什么。而且基于JSON扩展协议也更容易。
2)我建议你在GetStyle(字符串样式)方法的最开头添加日志记录。然后请尝试通过在浏览器中明确键入URL来实现它(或者更好地使用PostMan - 请参阅下面的链接,PostMan将帮助您测试POST请求,因为我看到您有POST请求)并确保网络-server代码有效。
只有当它工作时,请尝试您的前端AJAX请求。
我认为您没有在WebAPI中正确处理POST请求。它只会处理GET请求。有关详细信息,请查看此SO问题:Simple post to Web Api
3)链接到PostMan:https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?hl=en
答案 1 :(得分:0)
进行了一些挖掘并想出了这个链接:http://www.aspsnippets.com/Articles/Calling-ASPNet-WebMethod-using-jQuery-AJAX.aspx
网站上的源代码显示您可能缺少ajax调用中的一些主要功能:
function ShowCurrentTime() {
$.ajax({
type: "POST",
url: "Default.aspx/GetCurrentTime",
data: '{name: "' + $("#<%=txtUserName.ClientID%>")[0].value + '" }',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: OnSuccess,
failure: function(response) {
alert(response.d);
}
});
}
虽然这显然是针对他们的示例,但您会看到他们设置了以下不是
的属性contentType: "application/json; charset=utf-8",
dataType: "json",
success: OnSuccess,
failure: function(response) {
alert(response.d);
}
虽然成功和失败属性绝对是可选的,但我相信设置您的内容类型和数据类型会对您有所帮助。
答案 2 :(得分:0)
我将脚本更改为以下内容:
$.ajax({
type: "POST",
async: true,
url: 'AjaxRecieveStyle.aspx',
data: { style: comp1Style } //as I want to pass the parameter 'style' which is internally a JSON array.
});
我通过以下方式在C#中获取变量 style (without using [WebServices])
:
我写了一个方法GetStyle(string style)
来获取从ajax调用发送的数据。
注意:我从我的脚本中不调用 AjaxRecieveStyle/GetStyle
,因为我的C#方法无法访问该方法。实际上,数据来自 Page_Load
方法。
我使用 Request.Params["style"]
。
我的C#方法是:
protected void Page_Load(object sender, EventArgs e)
{
GetStyle(Request.Params["style"]);
}
protected void GetStyle(string style)
{
var recievedStyle = style;
//do something on the recieved data!
}
对于那些不想实际发送JSON数据的人来说,这将是另一种选择!但是使用JSON格式发送数据会增加代码的 可读性 ..