2013-07-25 3 views
0

Во-первых, я очень новичок в мире веб-разработки, поэтому извините, если этот вопрос слишком прост. Я пытаюсь использовать python для обработки запросов AJAX. Из чтения документации кажется, что Dojo/request должен быть в состоянии сделать эту форму, но я не нашел примеров, чтобы помочь вам в этом.Вызов функции python с использованием dojo/request

Предполагая, что у меня есть файл Python (myFuncs.py) с некоторыми функциями, которые возвращают данные JSON, которые я хочу получить с сервера. Для этого вызова я заинтересован в конкретной функции внутри этого файла:

def sayhello(): 
    return simplejson.dumps({'message':'Hello from python world'}) 

Что мне не ясно, как вызвать эту функцию с помощью Dojo/запроса. Документация предлагает примерно следующее:

require(["dojo/dom", "dojo/request", "dojo/json", "dojo/domReady!"], 
    function(dom, request, JSON){ 
     // Results will be displayed in resultDiv 
     var resultDiv = dom.byId("resultDiv"); 

     // Request the JSON data from the server 
     request.get("../myFuncs.py", { 
      // Parse data from JSON to a JavaScript object 
      handleAs: "json" 
     }).then(function(data){ 
      // Display the data sent from the server 
      resultDiv.innerHTML = data.message 
     }, 
     function(error){ 
      // Display the error returned 
      resultDiv.innerHTML = error; 
     }); 
    } 
); 

Это даже близко к тому, чего я пытаюсь достичь? Я не понимаю, как указать, какую функцию вызывать внутри myFuncs.py?

+2

Вы не можете вызвать такие функции python. Вы попробуете просто загрузить файл .py. Если вы хотите использовать python для веб-разработки, попробуйте такие фреймворки, как django или pylon. Пройдите через учебник, в котором вы получите ответ. – specialscope

+0

@specialscope спасибо за быстрый ответ. Мне нравится идея использования обещания Dojo по разрешению возвращенных данных с сервера. Можно ли связать вызов Dajaxice с python внутри dojo/request или dojo/prom? – en51nm

+1

Я не знаком с Dajaxice, поэтому не могу комментировать это. Вы можете просто создать GET или POST-обработчики в django и вызвать с помощью dojo get/post (ajax), затем вы можете вернуть json из django на основе запроса и использовать dojo для чтения json и делать все, что вы хотите с ним делать. – specialscope

ответ

1

Что вы можете сделать, это создать небольшой jsonrpc сервер и использовать додзё, чтобы сделать AJAX вызов к этому серверу и получить данные JSon ....

для стороны питона вы можете следовать этой

jsonrpclib

для додзё вы могли бы попробовать что-то вроде этого ..

<script> 
    require(['dojox/rpc/Service','dojox/rpc/JsonRPC'], 
    function(Service,JsonRpc) 
    {  
     function refreshContent(){ 
      var methodParams = { 
       envelope: "JSON-RPC-2.0", 
       transport: "POST", 
       target: "/jsonrpc", 
       contentType: "application/json-rpc", 
       services:{} 
      }; 

      methodParams.services['myfunction'] = { parameters: [] }; 
      service = new Service(methodParams); 

      function getjson(){ 
       dojo.xhrGet({ 
        url: "/jsonrpc", 
        load : function(){ 
         var data_list = []; 
         service.myfunction().then(
          function(data){ 
           dojo.forEach(data, function(dat){ 
            data_list.push(dat);            
           }); 
           console.log(data_list) 
          }, 
          function(error) { 
           console.log(error); 
          } 
         ); 
        } 
       }); 
      }   
      getjson(); 
     }  
     refreshContent(); 
     });        
    });  
</script> 

Я использовал этот подход с Джанго, где я не создавая другой сервер для вызовов rpc, но используя URL-адрес django для переадресации вызова моей функции. Но вы всегда можете создать небольшой сервер rpc, чтобы сделать то же самое.