2017-04-18 11 views
-1

私は会社で訓練中ですので、2012年にプログラムした別の訓練生のプログラムを使用する必要があります。私はいくつかの問題があります:XHR Django Projectで読み込めません

私がボタンを押すと、私は​​をJSONに回復させるJSを持っています。しかし、私は私のFirefoxのコンソールにこのメッセージを持っている:

Object { message: "Unable to load /query/?typeForm=com…", stack:".cache["dojo/errors/create"]/</</[email protected]…", response: Object, status: 0,responseText: "", xhr: XMLHttpRequest } 

マイJS:

function queryDataGrid(map, stringForm) { 
var test = "pouet"; 
require(["dojox/grid/DataGrid", 
     "dojo/store/Memory", 
     "dojo/data/ObjectStore", 
     "dojo/_base/xhr", 
     "dojo/domReady!", 
     "dojo/dom", 
     "dojo/_base/array"], 
function(DataGrid, Memory, ObjectStore, xhr, arrayUtil, dom) { 
    var nodeDomGrid = dom.byId("datagrid"); 
    window.alert("hey"); 
    xhr.get({ 
     url: "/query/", 
     form: dom.byId(stringForm), 
     handleAs: "json", 
     load: function(data) { 
      var nodeDomGrid = dom.byId("datagrid"); 
      var nodeGrid = dijit.byId("datagrid"); 

      var gridLayout = []; 
      var dataStore = new ObjectStore({ objectStore:new Memory({ data: data.fields }) }); 
      console.log("store"); 
      console.log(data.fields[0][1]); 

      globalData = data; 

      for(i in data.columns) { 
       gridLayout.push({ 
        name: data.columns[i], 
        field: data.columns[i], 
        width: "auto" 
       }) 
      } 

      nodeGrid.setStructure(gridLayout); 
      nodeGrid.setStore(dataStore); 

      var nodeMap = dom.byId("map"); 

      columns = data.columns; 
      columnsToDisplay = [] 

      numberColumn = 0; 
      for (i in columns) { 
       if (columns[i] == "Distance Fin") { 
        numberColumn = i 
       } 
       if (parseInt(i) > parseInt(numberColumn) && numberColumn != 0) { 
        columnsToDisplay.push({ value: columns[i], label: columns[i]}); 
       } 
      } 
      dijit.byId("dataToColor").addOption(columnsToDisplay); 

      var vectorLayer = map.getLayersByName("KML")[0]; 
      vectorLayer.removeAllFeatures(); 
      var kmlFile = createKMLFile(data.kmldata, dom.byId("hiddenColor").value, dom.byId("sizeLine").value, dom.byId("colourPR").style.backgroundColor, dom.byId("sizePR").value); 
      var features = KMLToFeatures(kmlFile); 
      var bounds; 
      for(var i=0; i<features.length; ++i) { 
       if (!bounds) { 
        bounds = features[i].geometry.getBounds(); 
       } else { 
        bounds.extend(features[i].geometry.getBounds()); 
       } 

      } 
      vectorLayer.addFeatures(features); 
      console.log(vectorLayer); 

      map.zoomToExtent(bounds); 
      refreshLayer(vectorLayer); 

      if (stringForm == "commonQueriesForm" && dijit.byId("table").get("value") == "location") { 
       dom.byId("colourPalette").style.display = "block"; 
       dom.byId("styleKML").style.display = "none"; 
      } 
      else { 
       dom.byId("colourPalette").style.display = "none"; 
       dom.byId("styleKML").style.display = "block"; 
      } 
     }, 
     // Message d'erreur à modifier 
     error: function() { 
      nodeDomGrid.innerHTML = "La requête a engendré une erreur."; 
     } 
    }) 
}); 

console.log(stringForm); 
}; 

マイフォーム:

<form id="commonQueriesForm" data-dojo-type="dijit.form.Form" onload="alert('test')"> 
<p> 
<div id="commonDataTitlePane" data-dojo-type="dijit.TitlePane" data-dojo-props="title: 'Requêtes'"> 
    <input type="text" name="typeForm" id="typeForm" value="common" style="display:none" /> 
    <select name="table" id="table" class="cSelect" data-dojo-type="dijit/form/Select" 
    data-dojo-props="onChange:function(){ if (dijit.byId('table').get('value') == 'location') {dijit.byId('age').set('disabled', true); } else {dijit.byId('age').set('disabled', false); }}"> 
     {% for key, value in dictTablesDatabase.items %} 
      <option value="{{ key }}">{{ key }}</option> 
     {% endfor %} 
      <option value="location">Repérages</option> 
     </select><br /> 
     <select name="road" id="road" class="cSelect" data-dojo-type="dijit.form.Select" data-dojo-props=""> 
      <option value="all">Toutes les routes</option> 
       {% for road in listRoad %} 
      <option value="{{ road|first|cut:' ' }}">{{ road|first|cut:' ' }}</option> 
       {% endfor %} 
     </select><br /> 
     <select name="age" id="age" class="cSelect" data-dojo-type="dijit.form.Select" data-dojo-props=""> 
      {% for age in arrayNumber %} 
       <option value="{{ age }}">{{ age }}</option> 
      {% endfor %} 
     </select> 
</div> 
<button type="executeButton" data-dojo-type="dijit.form.Button" onClick="queryDataGrid(map, 'commonQueriesForm');">Lancer la requête</button> 
</p> 
</form> 

urls.py:

from django.conf.urls import include, url 
from GSRBaseWeb.Home import views as myapp_views 

# Uncomment the next two lines to enable the admin: 
# from django.contrib import admin 
# admin.autodiscover() 

urlpatterns = [ 
# Examples: 
# url(r'^$', 'GSRBaseWeb.views.home', name='home'), 
# url(r'^GSRBaseWeb/', include('GSRBaseWeb.foo.urls')), 

# Uncomment the admin/doc line below to enable admin documentation: 
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')), 

# Uncomment the next line to enable the admin: 
# url(r'^admin/', include(admin.site.urls)), 
url(r'^home/$',myapp_views.home, name='home'), 
url(r'^home/query', myapp_views.queryDataGrid, name='queryDataGrid'), 

] 

景色を。 py:

# -*- coding: utf-8 -*- 
from django.shortcuts import render 
from django.http import HttpResponse 
from GSRBaseWeb.Utils.utils import Utils 
from GSRBaseWeb.DataAccess.databaseAccess import DatabaseAccess 
from GSRBaseWeb.DataAccess.GSRBaseDLLAccess import GSRBaseDLLAccess 
from ctypes import * 

# Envoie les données nécessaires aux différents formulaires 
def home(request): 
    dictToSend = {} 

    data = DatabaseAccess() 
    dictTablesDatabase = data.dataToDisplay() 
    dictToSend["dictTablesDatabase"] = dictTablesDatabase 

    # Sélection de l'ensemble des routes 
    queryRoads = "SELECT id_route, nom FROM routes" 
    listRoad = data.executeQuery(queryRoads) 
    dictToSend["listRoad"] = listRoad 

    # Liste pour les âges 
    arrayNumber = [] 
    i = 0 
    while i < 20: 
     arrayNumber.append(i) 
     i += 1 
    arrayNumber.append("Tous") 
    dictToSend["arrayNumber"] = arrayNumber 

    # Liste pour les emplacements 
    arrayLocation = ["Tous", " ", "D", "C", "G"] 
    dictToSend["arrayLocation"] = arrayLocation 

    return render(request, 'Home/home.html', context=dictToSend) 

# Récupère le contenu d'un formulaire et le traite en fonction du type de formulaire (commun, simple ou complexe) 
def queryDataGrid(request): 
    # request.GET renvoie un QueryDict (objet Django) 
    print("YOLO") 
    parametersContent = request.GET 
    whatForm = parametersContent.getlist("typeForm")[0] 
    print(type(whatForm)) 
    try: 
     accessDLL = GSRBaseDLLAccess() 
    except: 
     print(Exception.message()) 
    if whatForm == "common": 

     table = parametersContent.getlist("table")[0] 
     road = parametersContent.getlist("road")[0] 
     if table != "location": 
      if parametersContent.getlist("age")[0] == "Tous": 
       age = 20 
       print("True") 
      else: 
       print("False") 
       age = int(unicode(parametersContent.getlist("age")[0])) 
     if road == "all": 
      road = "" 

     # on fait une requête sur les repérages 
     if table == "location": 
      result, number = accessDLL.requete_reperage(road) 
     else: 
      result, number = accessDLL.requete_table(table, road, age) 

    elif whatForm == "simple": 
     """ 
     On fait le traitement du formulaire de requêtes simples 
     Prendre en compte des ajouts des formulaires 
     On va prendre en compte les différentes lignes du formulaire et leur nombre """ 

     listConditions = [] 

     # Lignes des données 
     listQueries = dataProcessingForm("Simple", parametersContent) 

     # Checkout et les routes 
     conditionCheckout = parametersContent.getlist("conditionCheckout")[0] 
     conditionRoad = parametersContent.getlist("conditionRoad")[0] 
     conditionRoad = 'ROUTE()="' + conditionRoad + '"' 
     listConditions.append(conditionRoad) 

     # Lignes des conditions 
     j = 1 
     while j < 6: 
      if parametersContent.__contains__("conditionData" + str(j)) == True: 
       data = parametersContent.getlist("conditionData" + str(j))[0] 
       # On récupère la table de la condition 
       table = data.split(":")[0] 
       location = parametersContent.getlist("conditionLocation" + str(j))[0] 
       age = parametersContent.getlist("conditionAge" + str(j))[0] 
       condition = parametersContent.getlist("condition" + str(j))[0] 
       value = parametersContent.getlist("valueCondition" + str(j))[0] 
       conditionLine = "(" + data + condition 
       if (str(value).isdigit()): 
        conditionLine += str(value) 
       else: 
        conditionLine += '"' + str(value) + '"' 
       conditionLine += ' ET ' + table + ':generation=' + str(age) + ' ET ' + table + ':emplacement="' + location + '")' 
       if conditionCheckout == "anything": 
        conditionLine += "NON" + conditionLine 
       listConditions.append(conditionLine) 
      else: 
       break; 
      j += 1 
     #@todo modifier la condition pour la Route(), ajouter un ET tout le temps 
     if conditionCheckout == "atLeast": 
      conditionQuery = ' OR '.join(listConditions) 
     elif conditionCheckout == "all": 
      conditionQuery = ' ET '.join(listConditions) 

     result, number = accessDLL.requete_avancee(listQueries, conditionQuery) 

    elif whatForm == "complex": 
     # On fait le traitement du formulaire de requêtes complexes 

     listQueries = dataProcessingForm("Complex", parametersContent) 
     conditionQuery = parametersContent.getlist("textareaConditions")[0] 
     result, number = accessDLL.requete_avancee(listQueries, conditionQuery) 

    json = "" 
    if number[0] > 0: 
     # json à renvoyer en fonction des données des formulaires 
     listResult = [] 
     i = 0 
     while i <= number[0]: 
      listResult.append(result[i]) 
      i += 1 
     json = Utils.jsonSerializeQueryResult(listResult) 
     print(json) 

    return HttpResponse(content=json, 
         status=200, 
         mimetype="text/plain") 

def dataProcessingForm(form, parametersContent): 
    """ Mise en forme des données des formulaires pour les requêtes 
    La mise en forme est faite pour la DLL utilisée qui effectue le plus gros des requêtes 
    """  
    listQueries = [] 
    i = 1 
    while i < 6: 
     if parametersContent.__contains__("data" + form + str(i)) == True: 
      data = parametersContent.getlist("data" + form + str(i))[0] 
      location = parametersContent.getlist("location" + form + str(i))[0] 
      if parametersContent.getlist("age" + form + str(i))[0] == "Tous": 
       age = 20 
      else: 
       age = int(unicode(parametersContent.getlist("age" + form + str(i))[0])) 
      contentToAdd = data + "," + location + "," + str(age) 
      print(contentToAdd) 
      listQueries.append(contentToAdd) 
     else: 
      break; 
     i += 1 

    return ";".join(listQueries) 
+0

タイトルにDjangoプロジェクトを指定すると、可能な回答が得られる可能性が高くなります。 –

+1

最初に提供したJSONからメッセージを展開する必要があります。例: /query /?typeForm = com ... – garmoncheg

+0

正確には、私は隠されているものを表示する方法を知らない。 – Nitner

答えて

-1

JSコードは、絶対パス/query/をロードしようとしているが、あなたのDjangoのパターンが^home/queryに対応するための設定です。 xhrのURLに/home/queryを使用してみてください。

+0

-1;ここでの質問は明らかに*「デバッグヘルプを求めている質問...最短のコードが必要」*に含まれていなければなりません。 –

+0

どのくらいのコードが厳密に必要であるかを知っている人は、自分自身を「研修生」と表現している人には分かりません。たとえそれがあったとしても、私は答えを投票することが特に有用であるとは思わない。 – jason0x43

+0

*「どのくらいのコードが厳密に必要であるかを知っている人は、自分自身を「訓練生」* -として完全に問題を記述している人には明らかではないかもしれません。彼らが価値の貢献を創造できなければ、ここに投稿してはいけません。 *「それがあったとしても、私は答えを投票することが特に有用であるとは思わない」* - 私はその視点を理解し、多くの人がそれを共有すると確信しているが、私は個人的に同意しない。私は彼らがサイトに害を及ぼすと信じており、彼らに答えることは彼らが投稿されることを奨励するので、このような質問に答えることをお止めしたい。 https://meta.stackexchange.com/a/194989/200582を参照してください。 –

関連する問題