多个jQuery帖子无效

时间:2015-10-06 14:08:59

标签: jquery asp.net-mvc

问题
在使用jQuery的ASP.NET MVC项目中,jQuery.post()函数很少返回数据,当我希望它始终返回数据时。

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

详情: 我在ASP.NET cshtml视图中定义了10个空跨度。 html中的每个跨度都由一个脚本跟随,该脚本调用一个名为ShowConstraints()的javascript函数:

<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>

我知道当跨度显示&#34;计算信息...&#34;时,已成功调用过帐功能。而且我知道当一个跨度改变以显示&#34;返回时发生了成功的帖子。&#34;。

然而,当只运行一个或两个跨度时,显示&#34;返回!&#34;。其余的节目&#34;计算信息...&#34;

作为附加信息,当我调试javascript并逐步执行时,一切都按预期工作,所有跨度显示&#34;返回!&#34;。

非常感谢。

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

最有可能发生的事情是你一次性调用这些信息,当时有些信息已经返回

outputEl = "#" + outputId;

现在设置为原始outputEl以外的其他内容。 您可以尝试延迟这些功能,以便它们不会同时调用,或尝试将它们作为回调函数链接。