2015-10-06 66 views
2

问题
在使用jQuery的ASP.NET MVC项目中,jQuery.post()功能很少返回数据,我希望它总是返回数据。多jQuery的岗位工作不

问题
为什么我.post()功能很少激活成功回调函数 - 即使每个职位返回200 OK的状态代码?

详细信息: 我在ASP.NET cshtml视图中定义了10个空跨度。每个跨度由脚本,调用称为ShowConstraints()的JavaScript函数遵循HTML:

<div> 
    @for (int i = 0; i < 10; i++) 
    { 
     string tempID = "span" + i; 
     <span id="@tempID"></span> 
     <script>ShowConstraints("@tempID")</script><br /> 
    } 
</div> 

生成的HTML看起来像这样每个span,脚本调用之前:

<div> 
    <span id="span0"></span> 
    <script>ShowConstraints("span0")</script><br> 
    ... 

ShowConstraints()功能如下:

function ShowConstraints(outputId) { 
    outputEl = "#" + outputId; 
    $(outputEl).html("Calculating info..."); 
    $.post("/TestURL/TestPost", function (data) { 
      $(outputEl).html(data); 
    }); 
} 

/TestURL/TestPost从返回的值始终是<span>Returned!</span>

我知道当span显示“Calculating info ...”时,发布功能已成功调用。而且我知道一个成功的帖子发生时,跨度更改为显示“返回!”。

但是,当只运行一个或两个跨度显示“Returned!”时。其余显示“计算信息...”

作为额外的信息,当我调试JavaScript和一步一步,一切按预期工作,所有跨度显示“返回!”。

非常感谢。

+0

调试时它的工作原理听起来像是一个异步问题。 – Blake

回答

0

我真的不会推荐在你的HTML中执行这样的代码。这必然会导致不一致,特别是使用多个<script>标签进行多个呼叫。

您应该从主要大宗的JavaScript代码内执行它的页面加载,这样的:

// On the page load 
$(document).ready(function() { 

    // Get the spans that we want to loop through 
    $('span.mySpans').each(function(index, value) { 

     var outputId = $(this).attr('id'); 

     ShowConstraints(outputId); 

    }); 
}); 

随着HTML类似:

<span class="mySpans" id="span0"></span> 
<span class="mySpans" id="span1"></span> 
<span class="mySpans" id="span2"></span> 
<span class="mySpans" id="span3"></span> 
+0

即使在纠正报价格式时也不会显示结果。 –

+0

嗯伤心的时候。尝试更新该变量,使其在每个函数调用的范围内都是新的。 – Luke

+0

即使这样也不会改变,对不起。 –

0

什么是最有可能发生的事情是你一次性调用一大堆这样的信息,并且在某些信息已经返回的时候

outputEl = "#" + outputId; 

现在被设置为原始输出E1以外的内容。 您可以尝试并延迟这些函数,以便它们不会在同一时间全部调用,或尝试将它们作为回调函数进行链接。