当我从jquery使用ajax发布到C#时,我有无法解释的行为。
1)主页面不是我在jQuery中请求的方法。
要解决这个问题,我只需在页面加载中添加一个if,这样如果特定项目在查询字符串中,它将触发一系列命令。它确实击中了if语句并完全运行代码。有一些方法可以改变地图上的颜色。这些从未发生过。我可以设置一个标签,它会直接通过它,但标签仍未设置。
2)奇怪的是......我的页面上有一个刷新计时器。它刷新页面,现在处理更改。
以下是我在jQUery中调用方法的方法:
function mycmethod(param)
{
//alert(precinct);
$.ajax({
url: "myPage.aspx/someMethod",
type: 'POST',
data: "params=" + param,
success: function iGotData(responseJSON) {
// alert("Worked");
},
error: function (xhr, status, errorThrown) {
console.log("Error: " + errorThrown);
console.log("Status: " + status);
console.log(xhr);
alert("Didnt work:" + errorThrown);
},
})
};
最初设置为async:true但是并没有什么区别。
它没有调用加载的方法是:
[WebMethod][ScriptMethod]
public Boolean someMethod(string param)
{
setFeatures();
GenerateMap();
return true;
}
我怀疑它的相关性,但是我用一个特定元素的鼠标来调用jquery调用。该jquery调用一个函数,该函数调用返回一些jSON的asmx Web服务。我在返回JSON后调用mycmethod
。
为什么我的UI元素在页面刷新之前没有响应。如果没有,有没有办法像计时器一样强制刷新?
答案 0 :(得分:3)
[WebMethods]方法应声明为静态。
我还发现您可能需要在ajax调用中指定内容类型:
contentType: "application/json; charset=utf-8"
此外,您的数据选项看起来很可疑。也许你应该将它附加到url选项:
url: "myPage.aspx/someMethod?params" + parm
或更理想地,将其作为JSON对象或JSON字符串发送:
data: {
params: param
}
或
data: JSON.stringify({
params: param
})
答案 1 :(得分:2)
如果我理解正确,您正在加载页面,然后通过ajax调用服务器并期望服务器更改当前加载页面的UI元素。
遗憾的是,它并不像那样。一旦您为页面提供服务,服务器本身就无法操作该页面而不进行刷新/回发(或沿着这些行)。
如果您想在不进行刷新/回发的情况下更新UI,可以让WebMethod返回HTML,并且您的jQuery success
方法可以更新相关控件。
或者你可以使用jQuery的.get()
通过ajax检索页面的新副本,并像这样更新你当前的页面。 (虽然效率较低)