我正在尝试通过jquery.ajax和json将表单数据发送到webmethod但是我无法在日志中发送或获取任何错误。任何人都可以指导我通过这个或我在哪里出错? .ajax方法没有执行并给出和警告" undefined" ?
function Submit() {
debugger;
var advantages = [];
var features = [];
var Elig_crit = [];
var Elig_value = [];
$('#AdvantagesContainer .Advantages').each(function () {
//var txtAdvantages = $(".Advantages")
//for (var i = 0; i < txtAdvantages.length; i++) {
advantages.push($(this).val());
//}
});
$('#FeaturesContainer .Features').each(function () {
features.push($(this).val());
});
$('.Eligibility .EligibilityCrit_TxtBox').each(function () {
Elig_crit.push($(this).val());
});
$('.Eligibility .EligibilityVal_TxtBox').each(function () {
Elig_value.push($(this).val());
});
debugger;
var objData = { Category: $('#ddlInsCategory option:selected').val(), Company: $("#ddlCompanyName option:selected").val(), PlanName: $("#<%=txtPlanName.ClientID%>").val(), PlanDesc: $("#<%=txtPlanDesc.ClientID%>").val(), features: features, advantages: advantages, Criteria: Elig_crit, Value: Elig_value }
//var jsonData = JSON.stringyfy({ objData: objData });
debugger;
$.ajax({
type: "POST",
url: "Edit.ascx/Save",
data: objData,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: OnSuccess,
error: function (response) {
alert(response.d);
}
});
}
function OnSuccess(response) {
alert("Success");
}
目前我还没有将任何代码写入我的webmethod。我刚刚制作了骨架,看看json会抛出什么数据。
[WebMethod]
public static void Save(object objData)
{
}
答案 0 :(得分:1)
您可以在服务器端创建强类型。这将具有适当的映射以及使用jQuery ajax的非常简单和推荐的方法。
只需在服务器端创建一个自定义类型,其属性名称与Javascript对象中u.seek(0)
的属性名称相匹配(确保您具有相同的名称并相应地更改数据类型): -
key
然后,更改您的public class Foo
{
public string Category { get; set; }
public string Company { get; set; }
public string PlanName { get; set; }
public string PlanDesc { get; set; }
public List<string> features{ get; set; }
public List<string> advantages { get; set; }
public List<string> Criteria{ get; set; }
public List<string> Value{ get; set; }
}
以接受此类型作为参数: -
WebMethod
最后从客户端发送JSON数据: -
[WebMethod]
public static void Save(Foo objData)
{
}
答案 1 :(得分:0)
有几种方法可以实现这一目标:
因为您已标记了WebMethod。您可以将scriptManager添加到服务器端表单,这将使客户端的所有WebMethod都可用。
使用scriptManager
如果您使用的是友好网址,则需要手动添加网页扩展名。您的RouteConfig设置RedirectMode.Off中的 ALSO ,如果您有redirectMode.permanent,则您的ajax调用将失败。
if (stringEndsWith(PageMethods.get_path(), "aspx")) {
} else {
PageMethods.set_path(PageMethods.get_path() + '.aspx');
};
使用PageMEthods直接从您的javascript调用您的WebMethod。
PageMethods.FN_TEST(your_parameter, onSucess, onError);
function onSucess(result) {
alert(result);
},
function onError(result) {
alert('Something wrong.');
}
您的信息页:
using System.Web.Services;
using System.Web.Script.Services;
通过添加ScriptService
来允许您的网页处理脚本服务[ScriptService]
public partial class your_page : System.Web.UI.Page{
...和您的网络方法
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static void FN_TEST(string iParam)
{
return "You have sent me " + iParam;
// Your result will be JSONised and look like this {d:Json_object}
//
}}
**使用Ajax帖子** 假设您的WebMethod设置如上。你的ajax调用将如下所示:
"ajax": {
"type": "POST",
"contentType": "application/json",
"dataFilter": function (data) {
// as web methods return {d:object} this method gets rid of the extra d container in your result set.
var msg = eval('(' + data + ')');
if (msg.hasOwnProperty('d'))
return msg.d;
else
return msg;
},
"dataType": "json",
"url": "your_page.aspx/FN_TEST", // your web methode
"data": function (d) {
// add your params here,
return JSON.stringify({ iParam: $("#your_field").val()});
},
"success": function (data) {
// do something with your result
},
},
如果你想自定义更多,你可以JSONise所有的表单字段,作为字符串发送,在你的web方法中将字符串解析回JSON并处理继续你的东西。
修改强> 上面的代码不是完整的代码,根据您的需要进行修改 哦顺便说一句..如果您使用回发,您可以在request.form集合中检索您的表单域。我假设你对这个
不感兴趣