所以在 default.aspx 中我有代码
<script type="text/javascript">
function validateForm()
{
test();
//here should return true or false and exit validateForm so not to run InsertUpdateData()
InsertUpdateData()
}
</script>
<script language="javascript" type="text/javascript">
(function test() {
var areaId = 98;
$.ajax({
type: "POST",
url: "GridViewData.aspx/GetRegions",
data: "{areaId:" + areaId + "}",
//data:99 ,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function artybones(data) {
// alert(data.d);
if (data.d == "Foo 98")
{ alert("its true"); }
else
{ alert("its false"); }
}
});
});
</script>
在 GridViewData.aspx 中我有
<script runat="server">
[WebMethod]
public static string GetRegions(int areaId)
{
return "Foo " + areaId;
}
</script>
当我从 javascript 调用 test() 时,我希望它返回 false,但似乎无法从测试中获取值。有人可以发布代码来执行此操作吗?我知道我已经很接近了..提前感谢那些发帖的人..
最佳答案
不要将测试函数包装在准备好的 DOM 中。您也不必为 ajax 成功命名该函数,因为您是在创建该函数时定义该函数的。最后,你的 ajax 调用中的 data:
参数搞砸了。当大括号应该位于 JSON 数据之外时,您可以将它们放在引号中。就像 {areaId:areaId}
这样,您可以在 JSON 对象上设置参数。您将该参数称为“areaId”,并将其设置为等于您也称为areaId 的变量。这没有什么问题,但是如果将areaId设置为areaId令人困惑,那么在javascript中更改变量名称var clientAreaId = 98;
那么它会更容易阅读和理解{areaId : clientAreaId }
这样做:
<script language="javascript" type="text/javascript">
function test() {
var areaId = 98;
var isTrue = false;
$.ajax({
type: "POST",
async: false,
url: "GridViewData.aspx/GetRegions",
data: { areaId: areaId },
//data:99 ,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
// alert(data.d);
if (data.d == "Foo 98")
{ alert("its true");
isTrue = true; }
else
{ alert("its false");
isTrue = false; }
}
});
return isTrue;
}
</script>
然后在您的测试调用中执行以下操作:
if (test() == true)
InsertUpdateData();
您不需要将命名函数包装在 DOM 中,因为它们在被调用之前不会被执行。但是,如果您在页面加载时调用 test()
,那么我会将该调用包装在 DOM 中:
$(测试);
最后,按照 Guffa 的建议,通过在 ajax 调用中的参数中添加 async: false 将您的请求转换为同步请求。
关于c# - 如何在 javascript 函数中从 JQuery 调用 asp.net 中的 [web 方法] 返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5186169/