2015-06-25 2 views
2

Я пытаюсь понять, как работает вызов Ajax.Ajax: Не удалось отправить объект Json в бутылку webservice

Я отправляю объект Json в веб-сервис python для бутылок в качестве URL-адреса.

$.ajax({ 

     type: "POST", 
     data: {"jstring": JSON.stringify(output)}, 
     url: "http://localhost:8080/salesvolume" , 

     contentType: "application/json; charset=utf-8", 
     dataType: "json", 

     success: function(data){ 

           $('#container').highcharts(data); 
           }, 
     error: function() { 
          alert("Something is not OK")  
           }, 

     }); 

Вышеупомянутый фрагмент - это мой Ajax Call. output - объект Json, который я намерен отправить на сервер.

@app.post('/salesvolume') 
def salesvolume(db): 
    jsonstring = request.forms.get('jstring') 
    _jsonparams = json.loads(jsonstring) 
    _studios = _jsonparams.Studios 

ret = `Some Json` 
return json.loads(ret) 
app.run(server='paste', host='localhost', port=8080, debug=True, reloader=True) 

И это мой фрагмент кода веб-службы.

Я получаю Status Code: HTTP/1.0 500 Internal Server Error

Я после бутылки и Jquery но Im документации просто не в состоянии взломать это. Любая помощь по этому вопросу будет действительно замечательной.

+0

Где находится ваша ошибка и какая трассировка стека? – IanAuld

+0

@IanAuld Ну, ошибка выбрана с консоли firefox, когда был сделан вызов Ajax. В принципе, вызов Ajx не проходит, и я получаю предупреждение об ошибке в ответ. Я не уверен, что такое трассировка стека, я новичок в этом. Это что-то, что я мог проверить? –

+0

@TauseefHussain Прозвучит вызов, вы получаете только 500 ошибок от сервера.Попробуйте переписать свою функцию как 'def salesvolume(): return {}' и посмотреть, попадает ли ваша функция успеха. – SwankSwashbucklers

ответ

1

Рассмотрим следующие вещи:

1) В JS, изменить URL, чтобы просто: /salesvolume.

2) В Python удалите аргумент arg - db из определения функции salesvolume. Или же вы можете получить этот ERR (а 500 ошибки):

TypeError: salesvolume() takes exactly 1 argument (0 given) <myServerIP> - - [30/Jul/2015 13:31:27] "POST /salesvolume HTTP/1.1" 500 1328

3) Проверьте отступы. Python это! Я думаю

ret = Some Json и

return json.loads(ret) потребности отступа (они должны быть внутри функции salesvolume)

Я написал эту подобный материал, и это, кажется, работает:

Python:

from bottle import * 
import json, requests 

@route('/') 
def atHome(): 
    return template('index') 

@route('/salesvolume', method="POST") 
def salesvolume(): 
    #your processings here... 
    ret = '{"key":"val"}' 
    return json.loads(ret) 

run(host='0.0.0.0', port=8093, debug=True, reloader=True) 

index.tpl и JS:

<html> 
<script type="text/javascript" src="https://code.jquery.com/jquery-1.11.3.min.js"></script> 

<body> 
<button onclick=ajaxF()>click</button> 
</body> 
<script> 
function ajaxF(){ 
$.ajax({ 
    type: "POST", 
    data: {"jstring": JSON.stringify("blah")}, 
    url: "/salesvolume" , 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(data){ 
     console.log('success'); 
     console.log(data) 
     }, 
    error: function() { 
     console.log("Something is not OK"); 
     }, 
    }); 
} 
</script> 

</html> 

Надеется, что это помогает!

0

Следующий код работает для меня в приложении, используя бутылку (посылают некоторые данные питона и отправляет некоторые данные обратно в JSON из питона в JS):

ЯШИ:

$.post('/getData', {myStringInput:dataToSendtoBottle}, function(data){ 
var myJson = JSON.parse(data) //myOutput is dispatched back to js as JSON 
}); 

питон:

@route('/getData', method='POST') 
def getData(): 
    myDataReceivedfromJs = request.forms.get('myStringIput') 
    if myDataReceivedfromJs: 
     myStringOutput = 'OK' 
     myOutput = json.dumps(myStringOutput) 
    return myOutput