abrufen von Daten aus python-Flasche mit ajax jquery
Ich versuche eine html-Seite für die Interaktion mit einem python-Skript gibt einen json-string, mit ajax/jquery. Ich installierte Flasche für die grundlegende Funktionalität der url-routing.
Problem ist, dass mein browser zeigt, dass mein ajax-Skript empfängt ein content-length-5 (das ist die Zeichenfolge "tring" (siehe server.py Funktion showAll ()), aber irgendwie seine auch nicht gespeichert in der Variablen " Ergebnis(siehe Funktion im loader script.js und damit ich nicht die zurückgegebenen Daten.
kann mir jemand sagen, was schief läuft..
meine html-Datei sieht wie
index.html
<!DOCTYPE>
<html>
<head>
<title>
magpie
</title>
<script type="text/javascript" src="js/script.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript">loader();</script>
</head>
<body>
<div id="main"></div>
</body>
</html>
Wenn ich call load() anstelle von loader() in dieser Datei der Inhalt angezeigt wird.
dem ajax-Skript:
script.js
function loader()
{
$(document).ready(function(){
$.get('http://[localhost]:1111/', function(result){
alert('success');
$('#main').html(result);
});
});
}
function load()
{
$(document).ready(function () {
$.getJSON('data.json', function (data) {
var output = '';
$.each(data, function(key, val) {
output += '<h3>' + val.device + ' ' + val.status + '</h3>';
})
$('#main').html(output);
});
});
}
den beiden python-Skripte sind :
server.py
from bottle import get, post, request, run, response
import devices
@get('/')
def showAll():
# return devices.data
return "tring"
@post('/act')
def act():
deviceId = request.forms.get('deviceId')
devices.changeState(deviceId)
return
run(host = "[localhost]", port = 1111)
devices.py
import json
data = json.load(open('data.json', 'r+'))
nos = len(data) # Number of devices
def changeState(id):
state = data[id]['status']
if state == 'on':
data[id]['status'] = 'off'
else:
data[id]['status'] = 'on'
json.dump(data, open('data.json', 'w'))
return 1
und schließlich meine json-Datei(wenn es kommt):
{"B1": {"device": "fan", "status": "on"}, "B3": {"device": "light", "status": "off"}, "B2": {"device": "fan", "status": "on"}}
Laden http://[localhost]:1111/ im browser angezeigt wird, ist die zurückgegebene Zeichenfolge "tring".Auch das laden der Seite nur in firefox, während andere Browser zeigen einige erlauben-acces-origin-Fehler.
Dies ist ein screenshot von meinem browser :
Du musst angemeldet sein, um einen Kommentar abzugeben.
wie ist Ihre browser-Empfang "tring" wenn du zurückkehrst "string" aus Ihrem python-Skript.
Ich denke, Sie
Ich nehme an,
Dein server ist nicht Rückkehr json; es ist die Rückkehr text/html.
Stattdessen:
Rückkehr eine
dict
wie diese:Hatte ich zum aktivieren der accessControlAllowOrigin header (danke an @user3202272, bekam ich den Tipp aus deiner Antwort).
Hinzugefügt, ein paar Zeilen zu meiner server.py Datei und das war es.
Nun sieht es so aus
server.py
Also im Grunde war das problem mit der CORS. Sie können mehr darüber Lesen Sie hier
https://gist.github.com/richard-flosi/3789163
Flasche Py: Aktivieren von CORS für jQuery-AJAX-requests
danke an alle..!! 😀