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