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

How to make Inline expression in javascript wait before executing

本文关键字:等待 表达式 JavaScript 执行      更新时间:2023-09-26

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

这里的关键是'no'是由代码隐藏方法插入的变量,可以帮助我的javascript的其余部分确定某些内容是否应该显示。

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

那么如何防止在进行 ajax 调用之前计算表达式呢?

爪哇语

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

和添加图钉功能

function AddPushpin(name, description, latitude, longitude, selected) {
    // Add a pin to the map
    var center = new Microsoft.Maps.Location(latitude, longitude);
    var pin = new Microsoft.Maps.Pushpin(center, null);
    if(selected !== null || selected!="")
      {
      if(selected == "yes")
       {
       infoboxOptions = new Microsoft.Maps.Infobox(center,
        {                          width: 285,
                               height: 170,
                               visible:true,
                               actions:[{label: 'Associate', eventHandler: associate}]
                               });
                               map.entities.push(infoboxOptions);
        }
    }
    map.entities.push(pin);
}

和代码隐藏代码段

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;
你不能

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

要在 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() %>
 });

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