我有以下JQuery脚本: -
<script type="text/javascript">
$(document).ready(function () {
$("#languageMenu").change(function () {
var value = $("#languageMenu option:selected").val();
setSession(value);
});
function setSession(val) {
alert(val);
$.ajax({
type: "POST",
url: "Dashboard.aspx/SetUserCulture",
data: JSON.stringify(val),
contentType: "application/json;charset=utf-8;",
success: function () {
__doPostBack('UPMainMenu', '');
__doPostBack('UPContent', '');
},
error: function () {
alert("Fail");
}
});
};
});
</script>
然而它总是失败并且永远不会击中我的WebMethod。我在C#中的WebMethod是: -
[WebMethod(EnableSession = true)]
public static void SetUserCulture(string lang)
{
HttpContext.Current.Session["CurrentUI"] = lang;
String selectedLanguage = lang;
Thread.CurrentThread.CurrentCulture =
CultureInfo.CreateSpecificCulture(selectedLanguage);
Thread.CurrentThread.CurrentUICulture = new
CultureInfo(selectedLanguage);
}
我似乎无法弄清楚为什么它没有击中我的WebMethod。
非常感谢任何帮助!
感谢您的帮助和时间
** * ** * * 更新 < EM> * ** * ** * ** * ** * ** < EM> * ** * ** * ** * ** * ** < /强>
$(document).ready(function () {
$("#languageMenu").change(function () {
var value = $("#languageMenu option:selected").val();
setSession(value);
});
function setSession(lang) {
alert(lang);
$.ajax({
type: "POST",
url: "Dashboard.aspx/SetUserCulture",
dataType: "json",
data: "{'lang':'" + lang + "'}",
contentType: "application/json;charset=utf-8;",
success: function (data) {
alert(data);
__doPostBack('UPMainMenu', '');
__doPostBack('UPContent', '');
},
error: function (e) {
console.log(e);
}
});
};
});
** * *** 第二次更新 的 ** * ** * ** * ** * < / EM> ** * ** * ****
$(document).ready(function () {
$("#languageMenu").change(function () {
var value = $("#languageMenu option:selected").val();
setSession(value);
});
function setSession(lang) {
alert(lang);
$.ajax({
type: "POST",
url: "Dashboard.aspx/SetUserCulture",
data: "{'lang':'" + JSON.stringify(lang) + "'}",
contentType: "application/json;charset=utf-8;",
dataType: "json",
success: function() {
__doPostBack('UPMainMenu', '');
__doPostBack('UPContent', '');
},
error: function() {
alert("Fail");
}
});
};
});
答案 0 :(得分:1)
尝试编写$.ajax
方法调用,如下所示:
function setSession(val) {
$.ajax({
type: "POST",
url: "Default.aspx/SetUserCulture",
data: "{'lang':'"+ val + "'}", // Note this portion
contentType: "application/json;charset=utf-8;",
success: function (data) {
alert(data);
__doPostBack('UPMainMenu', '');
__doPostBack('UPContent', '');
},
error: function (e) {
console.log(e);
}
});
}
由于您的web method
传递了lang
参数,因此在ajax调用中您可能必须指定该参数。虽然有很多不同的方法可以做到这一点,但我已经提出了这个解决方案。 我尝试调用我的网络方法,但它有效。
注意:强>
如果它是一个有效的json对象,如{'lang':'hi'}
,则jQuery可能不会将其作为json数据发送,而是将其序列化为lang=hi
,从而得到错误。 _以前它根本没有通过。
由于
答案 1 :(得分:0)
Dado说 - 在ajax调用中你必须指定参数名称。
但是你传递的是一个简单的字符串,不需要JSON - 只需跳过
contentType: "application/json;charset=utf-8;",
并使用
contentType: "text/html",
答案 2 :(得分:0)
ResolveUrl会根据请求为您提供网址
var pageUrl = '<%= ResolveUrl("~/Default.aspx")%>';
$(document).ready(function () {
$("#languageMenu").change(function () {
var value = $("#languageMenu option:selected").val();
setSession(value);
});
setSession('testing');
function setSession(lang) {
alert(lang);
$.ajax({
type: "POST",
url: pageUrl + "/SetUserCulture",
data: "{'lang':'" + JSON.stringify(lang) + "'}",
contentType: "application/json;charset=utf-8;",
dataType: "json",
success: function () {
alert('success');
},
error: function () {
alert("Fail");
}
});
};
});