通过Ajax将页面加载到div中会返回错误

时间:2018-10-30 12:44:22

标签: javascript jquery ajax laravel laravel-blade

我目前正在尝试使用Ajax将页面的特定部分加载到div中:

$(document).on("click", "#claim_forum_groups", function (e) {
    e.preventDefault();
    $.ajax({
        url: "/user/{{ $user->id }}/groups",
        type: "POST",
        cache: false,
        data: {
            subtype: 'claim_groups',
            type: 'forum_account'
        },
        headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }
    })
   .done(function (data) {                      
        if(data == "success")
        {
            $("#forum_info_container").load(location.href + " #forum_info_container");
            $("#forum_data_container").load(location.href + " #forum_data_container");
            alert("good");
        }
    })
   .fail(function (data) {
        console.log(data);
        alert("bad");
    });
});

当前发生的事情是,很奇怪。有时,它会正确加载两个div。当我重新尝试对所有内容进行“压力测试”时,它只会加载“ forum_info_container”,并且当我检查“网络”选项卡时,它显示了视图中使用的未定义stdClass索引“ id”的错误。

即使在测试时,也定义了ID ,因为刷新页面时一切看起来都很好。它有时似乎起作用,有时却没有。我的猜测是.load()的工作时间过早或类似。我尝试使用setTimeOut,但无法解决这种情况。

这是我的forum_data_container div供参考:

<div class="card-body mb-3" style="padding-top:0px" id="forum_data_container">
        @if(!is_null($info))
            <div class="post-meta mb-2">
                 Posts - {{ $info->id }}
            </div>
            <div class="post-meta mb-2">
                 Stats - {{ $info->id }}
            </div>
        @else
            No info available.
        @endif
</div>

1 个答案:

答案 0 :(得分:1)

尝试一下:

final SwipeRefreshLayout swipeRefreshLayout = findViewById(R.id.swipe);

swipeRefreshLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            swipeRefreshLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
        } else {
            swipeRefreshLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
        }

        Rect rect = new Rect();
        swipeRefreshLayout.getDrawingRect(rect);
        swipeRefreshLayout.setProgressViewOffset(false, 0, rect.centerY() - (swipeRefreshLayout.getProgressCircleDiameter() / 2));
    }
});