首页 > 解决方案 > 执行 AJAX 调用时不调用 Django 视图

问题描述

我正在尝试设置 AJAX 调用以调用 Django 视图,执行一些计算,然后将输出返回到我的 html 页面。不幸的是,视图似乎没有达到。不知道出了什么问题,但我的 AJAX 经验非常有限。这个想法是,当我的滑块看到值发生变化时,它会触发 AJAX 调用。触发器似乎可以工作,因为它显示了我的警报弹出窗口。但就是这样,没有其他事情发生。能否请你帮忙?

这是我的 html/AJAX 代码:

 <div class="slider-wrapper">
    <span>Option 1 Imp. Vol.</span>
    <input class="toChange" id="rangeInput" name="rangeInput" type="range" value="{{Sigma}}" min="0" max="150" step="0.1" oninput="amount.value=rangeInput.value" />
    <input class="toChange" id="amount" type="number" value="{{Sigma}}" min="0" max="150"  step="0.1"oninput="rangeInput.value=amount.value" />
  </div>

<label>Ajax Test:</label>
<span id="Atest">

 <script type="text/javascript">
   function inputChange () {
        var Sigma = document.getElementById("rangeInput").value;
        alert();
        $.ajax({
                url: '/finance/templates/optionstrategies/',
                type: 'POST',
                data: {'Sigma': Sigma,
                },
                //dataType: "json",
                success: function(optionVal) {
                document.getElementById("Atest").innerHTML = optionVal;
                }
        }); 
    }

    $(".toChange").change(inputChange); 
 </script>

这是我的view.py:

def optionStrategies(request):
    errors=''
    if request.method == 'POST' and request.is_ajax():
        print('ok')
        Type = request.POST.get('Type')
        V = request.POST.get('V')
        Q = request.POST.get('Q')
        S = request.POST.get('S')
        K = request.POST.get('K')
        r = request.POST.get('r')
        t = request.POST.get('t')
        Sigma = request.POST.get('rangeInput')

        BS = BlackScholes(Type = 'Vanilla', S = float(S), K = float(K), sig = float(Sigma)/100, r = float(r)/100, t = float(t)/365)
        optionVal = BS[0]
        print(optionVal)

        optionVal = json.dumps(optionVal)
        return HttpResponse(optionVal, content_type='application/json')

Edit1:添加 urls.py 代码:

urlpatterns = [
    url(r'^$',views.home, name="homepage"),
    path('optionstrategies/', views.optionStrategies, name="optionstrategies"),
    path('impliedvolatility/', views.impliedVolatilityHtml, name="impliedvolatility"),

标签: javascriptdjangoajax

解决方案


问题出在网址上。将 '/finance/templates/optionstrategies/' 替换为 '/optionstrategies/' 就可以了。


推荐阅读