c# - 从 WebService (.NET) 使用 C# 调用 javascript

标签 c# javascript jquery ajax

我有一个包含 JavaScript 的网页,它使用 jQuery 和 AJAX 调用 C# 方法。这很好用。我想知道如何从 C# 代码调用 JavaScript 函数(如果可能的话)。如果不可能,有其他明智的选择吗?

最佳答案

假设浏览器发起交互

一般来说,您的服务器端 C# 代码将响应客户端代码发起的交互。如果您正在寻找 C# 代码在没有浏览器请求的情况下启动交互的方法,请参阅下面的下一部分。

如果您正在处理整页响应,那么您当然可以只输出包含您希望发生的调用的 script 标记。确保 script 在其调用的函数已由较早的 script 标记定义之后进行调用,并且如果需要要进行 DOM 交互,请务必将该脚本放在页面底部(或使用 jQuery 的 ready 功能)。

响应 Ajax 调用,C# 代码可以返回包含 JavaScript 代码的字符串,然后您的页内代码将执行该字符串(例如,通过 eval 或类似方法),但通常最好以避免这种情况。

相反,让 C# 代码返回数据以响应 Ajax 调用,并让页内代码通过调用适当的函数来响应该数据。

这两者的混合是让您的 C# 代码返回指示要调用哪个函数以及要向其提供什么参数的数据,并拥有一个使用函数名称索引的函数映射,例如:

var functions = {
    foo: function(arg0, arg1) {
        alert("foo called with " + arg0 + "," + arg1);
    },
    bar: function(arg) {
        alert("bar called with " + arg);
    }
};
$.ajax({
    url:      "/path/to/resource",
    dataType: "json",
    success:  function(data) {
        if (data && data.fname && data.args) {
            functions[data.fname].apply(undefined, data.args);
        }
    }
});

在那里,您的 C# 代码将返回一个字符串,其中包含 JSON 中编码的信息。作为具有 fname 属性(给出函数名称的字符串)和 args 属性(传递给函数的参数数组)的对象,jQuery 将反序列化为给你的一个对象。然后我们使用名称 (functions[data.fname]) 在映射中查找函数对象,并使用内置 Function#apply调用它并传入参数。这是可行的,因为您可以使用点语法和属性名称文字 (obj.propName = 42) 或使用括号语法和属性名称字符串 ( >obj["propName"] = 42),在后一个示例中,字符串可以是任何表达式,包括变量或属性引用 (name = "propName"; obj[name] = 42; ) - 这就是我们在函数 map 上查找函数的方式。

我并不是建议你这样做,只是说这是可能的。

如果您尝试让服务器发起交互

如果您希望服务器连接到浏览器,则必须在它们之间建立一些通信 channel ,或者使用新的(并且受到各种支持)web sockets API,或各种Comet techniques .

关于c# - 从 WebService (.NET) 使用 C# 调用 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8287133/

相关文章:

jquery - Superscrollorama onPin 弄乱了我的布局

c# - 实现 2 个相似类的更好方法

c# - 在 ASP.NET 网页中打开新选项卡

c# - 字节数组中 UTF8 XML 文档中 ASCII 字符串的编码

javascript - 添加或删除 Javascript 时钟的小时或分钟

jquery - 如何对记录集进行分页

c# - 更改生成的单元测试文件的目录

javascript - 需要使用 javascript 实现我的算法

javascript - 具有多个文件选择和添加/删除文件功能的 HTML 文件字段

javascript - jQuery,按类名显示所有元素