C# 如何使javascript中的内联表达式在执行之前等待

C# 如何使javascript中的内联表达式在执行之前等待,c#,javascript,asp.net,ajax,eval,C#,Javascript,Asp.net,Ajax,Eval,我有一个表达式,用于计算代码隐藏文件中的方法。该方法生成javascript,然后返回: AddPushpin('data','more data',number,number,'no') 这里的关键是'no'是一个由代码隐藏方法插入的变量,它帮助我的其余javascript确定是否应该显示某些内容。(基本上是bool) 我遇到的问题是,代码隐藏中的方法需要一个变量(result,在下面的代码中),该变量在计算表达式之前通过ajax调用发送,以确定要在javascript中生成的正确变量,但表达

我有一个表达式
,用于计算代码隐藏文件中的方法。该方法生成javascript,然后返回:
AddPushpin('data','more data',number,number,'no')

这里的关键是
'no'
是一个由代码隐藏方法插入的变量,它帮助我的其余javascript确定是否应该显示某些内容。(基本上是bool)

我遇到的问题是,代码隐藏中的方法需要一个变量(
result
,在下面的代码中),该变量在计算表达式之前通过ajax调用发送,以确定要在javascript中生成的正确变量,但表达式总是在页面加载时计算

那么,如何防止在进行ajax调用之前对表达式求值呢

Javascript

function displayGeneralInfo(specifics)
     {
     var callback = AddQueryString(window.location.href, "action", "displayResults");
     $.ajax({
            url: callback,
            type: "POST",
            async: false,
            data: {
                specifics: specifics
                }
                });
                <%= GetAddPinScript() %>
     }
还有代码隐藏片段

public string GetAddPinScript()
    {
foreach (Location location in foo(x => !string.IsNullOrWhiteSpace(x.Longitude) && !string.IsNullOrWhiteSpace(x.Latitude)))
        {
            selected = "no";
            if (!result.IsNullOrEmpty())
            {
                if (location.MapPinDescription.IndexOf(result) > 0)
                    selected = "yes";
            }
            pins.Add(string.Format("AddPushpin('{0}', '{1}', {2}, {3}, '{4}');",
                location.etc1("'", @"\'"), location.etc2("'", @"\'"), location.etc3, location.etc4, selected));
           string retVal = string.Join("\n", pins.ToArray());
           return retVal;

要在ajax调用完成后运行add pin脚本,应将其设置为ajax调用的完整处理程序:

function displayGeneralInfo(specifics)
 {
 var callback = AddQueryString(window.location.href, "action", "displayResults");
 $.ajax({
        url: callback,
        type: "POST",
        async: false,
        data: {
            specifics: specifics
            }
            },
        complete:  <%= GetAddPinScript() %>
 });
函数显示通用信息(细节)
{
var callback=AddQueryString(window.location.href,“操作”,“显示结果”);
$.ajax({
url:回调,
类型:“POST”,
async:false,
数据:{
细节:细节
}
},
完成:
});

请注意,上述语法假定
GetAddPinScript
将返回一个函数,既可以是现有函数的名称,也可以是匿名函数块。

不能让它等待。javascript在客户机上执行,此函数在服务器上运行。Asp.net在将数据发送到客户端之前会执行所有绑定,所以您无法说等待一些代码在客户端上运行,然后再运行此函数。我建议您在对服务器进行ajax调用时调用此函数。从该函数返回一些html,然后将其包含在成功函数的html中。

谢谢,我当时正使劲撞墙试图找到答案。是否可以让ajax调用返回函数,然后执行该函数?您可以在所做的ajax调用中执行该函数。让您的RESTAPI返回一些html,然后在您的成功函数中将该html放入您的html页面。例如,您对url/xyz进行ajax调用,此请求将通过控制器上的某些操作来处理。在此操作中调用函数GetAddPinScript,然后从操作中返回一些html,如AddPushpin('data','more data',numbers,numbers,'no');。然后在ajax的success函数中,将这个脚本标记附加到body标记的末尾
function displayGeneralInfo(specifics)
 {
 var callback = AddQueryString(window.location.href, "action", "displayResults");
 $.ajax({
        url: callback,
        type: "POST",
        async: false,
        data: {
            specifics: specifics
            }
            },
        complete:  <%= GetAddPinScript() %>
 });