我正在尝试编写一个使用JQuery调用python脚本的简单Web应用程序。 python脚本以JSON格式返回数据。这是我的Javascript中的ajax调用:
console.log('before');
$.ajax({
dataType: "json",
url: "simple.py",
success: function() { alert("Success"); },
error: function(request, error) { console.log(request); }
});
console.log('after');
这是我的python脚本:
#!/usr/bin/env python
import json
l = "hello"
print json.dumps(l)
当我运行Javascript时,我收到“内部服务器错误”。如果我在ajax调用中将dataType更改为“script”,或者将print
更改为return
,则会发生同样的情况。
当我改为使用像我这样的普通JSON文件时,可以从网上获得一些例子:
{
"one": "Singular sensation",
"two": "Beady little eyes",
"three": "Little birds pitch by my doorstep"
}
dataType: "json"
和url: "test.json"
,效果很好。当我使用python脚本打印出一堆HTML而不是JSON时,它也可以正常工作。当我从命令行自己运行simple.py时,它会按照应该的方式输出结果,好像什么都没有错。但是,出于某种原因,我的JQuery不会收到JSON数据。在Web Inspector中,在“网络”下,simple.py的类型列为text / html,这似乎不正确。我认为这应该是application / json,但我不确定如何改变它。
我正在使用Mac OSx附带的Apache2服务器,我将所有网站文件都放在Library / WebServer / Documents下。我通过“localhost”网址访问我的网站。
日志中的错误:
(8)Exec format error: exec of '/Library/WebServer/Documents/UBCNetworks/simple.py' failed, referer: localhost/UBCNetworks/index.html
.... Premature end of script headers: simple.py, referer: localhost/UBCNetworks/index.html
答案 0 :(得分:1)
解决了这个问题!我必须在我的python脚本中添加以下行:
print "Content-type: application/json\n\n";
这显然是“脚本标题的过早结束”错误意味着...这是缺少的脚本标题。我的javascript现在打印出“成功!”以及“hello”,python脚本返回的JSON对象。在Web Inspector中,simple.py的类型现在是application / json而不是text / html。
(感谢Barmar的帮助!)