使用“WebMethod”调用C#方法将返回“undefined” - javascript

首先,我知道有很多与此类似的问题,但是在我的特定情况下它们都没有帮助(很可能我只需要澄清一下,并且我不想打开旧的线程)。

我正在创建一个应用程序,我需要在jQuery函数中调用C#方法。之所以需要这样做,是因为我需要使用两个特定的参数对数据库执行查询。

Javascript:

$(".button").click(function(){
    var dataId = $(this).attr("data-Id");

    var s = PageMethods.returnStr(dataId, onSuccess, onError);
    function onSuccess(result){
        alert(s);
    }
    function onError(result){
        alert("error");
    }
});

C#:

[WebMethod]
public static string returnStr(string Id)
{       
    // ... blah blah make query, return string s
    return s;
}

返回的字符串是不确定的。如果我使用alert(result),则只获取页面的语法。

我也尝试使用以下方法引用c#变量:

C#

public static string s;

JavaScript:

alert('<%=s%>');

这样就可以了,但是当我调用WebMethod时,我无法修改。

我尝试过的最后一件事是ajax,但是即使我根据在SO上找到的答案对它进行建模,也无法按照我的意愿使其工作-它返回“ [object Object]”:

AJAX:

$.ajax({
    type: "POST",
    url: "default.aspx/returnStr",
    dataType: "json",
    contentType: 'application/json; charset=utf-8',
    error: function(result){
        alert("request failed" + result)
    },
    success: function(result){
        alert(result);
    }
});

任何建议都非常感谢!

参考方案

你不能做你想做的。 Javascript在Web浏览器中运行。 C#在服务器上运行。您无法在浏览器中运行C#代码。

使用alert('<%=s%>');之所以有效,是因为在发送给客户端之前先在服务器上对其进行评估。

您有两种选择:

编写一个满足您需要的纯Javascript函数。
使用ASP控件中的常规Web表单事件处理程序(即按钮的OnClick方法)。
拨打AJAX回服务器,以完成您需要的操作。

我看到您尝试了#3,但是您没有正确执行。 “ default.aspx / returnStr”处的URL毫无意义。它不会自动运行default.aspx.cs中的returnStr方法。

您最好使用#2。这将是最简单的。

更新:
另一个选择是使用asp Button(如#2),然后在OnClick方法中使用ClientScript.RegisterStartupScript,它将在回发完成后将Javascript注入页面。在注入的JavaScript中,您可以运行代码以打开弹出窗口。

javascript popupwindow之后的行如何工作? - javascript

好的,我有一个来自后面代码的方法,可以创建一个popupwindow。然后有一行代码要在那之后执行,我想知道那行代码何时执行,是在使用popupwindow之后执行还是在创建popupwindow之后执行?例如:void exPopupWindowMethod() { string scr = "window.open('exampleP…

Javascript-Urls的奇怪字符串比较行为 - javascript

最近,在编写我无法理解的javascript时遇到了字符串比较的问题。我从完全相同的网址创建了两个字符串,当我比较它们时返回false,但是在重新分配相同的字符串后,比较返回true。这是我的示例:var str1 = "http://google.com/"; var str2 = "http://google.com‏/&#…

ajax:从json数组中提取json对象 - javascript

JSON(来自api的内部数组):[{"id":"001", "name":"john", "age":"40"}, {"id":"002", "name":"jane&…

Javascript-从当前网址中删除查询字符串 - javascript

单击提交按钮后,我需要从网址中删除查询字符串值。我可以用jQuery做到这一点吗?当前网址:siteUrl/page.php?key=value 页面提交后:siteUrl/page.php 实际上,我已经从另一个带有查询字符串的页面着陆到当前页面。我需要在页面首次加载时查询字符串值以预填充一些详细信息。但是,一旦我提交了表格,我就需要删除查询字符串值。我已…

AJAX SQL更新不起作用 - javascript

我精简了代码,使这个问题更简单了。这是文件顶部的PHP。if (isset($_POST['action'])) { $field = $_POST['db_field']; $value = $_POST['db_value']; $fields=array('points'=…