使用AJAX在本地将数据从JavaScript发送到Python函数
我正在尝试建立一个网站,用户可以在其中输入文本,这些文本将通过javascript获取,并发送到python函数,然后发布到twitter上。目前,python函数与站点的其余部分一起存储在本地。然而,我的AJAX不是很好,我有一些问题 我已经编写了AJAX代码,它通过tweet向python函数发送POST请求,响应是整个python脚本。没有连接到脚本正在侦听的套接字。下面是AJAX函数和python脚本。知道发生了什么事吗 提前感谢您的帮助使用AJAX在本地将数据从JavaScript发送到Python函数,javascript,jquery,python,ajax,Javascript,Jquery,Python,Ajax,我正在尝试建立一个网站,用户可以在其中输入文本,这些文本将通过javascript获取,并发送到python函数,然后发布到twitter上。目前,python函数与站点的其余部分一起存储在本地。然而,我的AJAX不是很好,我有一些问题 我已经编写了AJAX代码,它通过tweet向python函数发送POST请求,响应是整个python脚本。没有连接到脚本正在侦听的套接字。下面是AJAX函数和python脚本。知道发生了什么事吗 提前感谢您的帮助 $(function(){ $('#Po
$(function(){
$('#PostTweet').on('click', function(e) {
var tweet = document.getElementById("theTweet").value;
var len = tweet.length;
if(len > 140){
window.alert("Tweet too long. Please remove some characters");
}else{
callPython(tweet);
}
});
});
function callPython(tweet){
window.alert("sending");
$.ajax({
type: "POST",
url: "tweet.py",
data: tweet,
success: function(response){
window.alert(response);
}
})
}
还有Python脚本:
from OAuthSettings import settings
import twitter
from socket import *
consumer_key = settings['consumer_key']
consumer_secret = settings['consumer_secret']
access_token_key = settings['access_token_key']
access_token_secret = settings['access_token_secret']
s = socket()
s.bind(('', 9999))
s.listen(4)
(ns, na) = s.accept()
def PostToTwits(data):
try:
api = twitter.Api(
consumer_key = consumer_key,
consumer_secret = consumer_secret,
access_token_key = access_token_key,
access_token_secret = access_token_secret)
api.PostUpdate(data)
makeConnection(s)
except twitter.TwitterError:
print 'Post Unsuccessful. Error Occurred'
def makeConnection(s):
while True:
print "connected with: " + str(na)
try:
data = ns.recv(4096)
print data
PostToTwits(data)
except:
ns.close()
s.close()
break
makeConnection(s)
您的问题是您使用的是对HTTP协议一无所知的纯套接字。看一看微框架或web微框架,了解如何将python脚本或函数转换为web端点 您完全可以使用套接字编写一个简单的web服务器,事实上您已经这样做了。但这种方法很快就会变得单调乏味,除了简单的练习 例如,您的代码仅限于处理单个请求处理程序,这是问题的核心 post请求上的url错误。在您的设置中,没有url“tweet.py”的概念。如果您也从同一服务器为jquery所在的网页提供服务,那么该url实际上可以工作(但您不能) 您必须发布到“”,并且可以在“”、“”之后拥有任何所需的路径。只需确保首先从命令行运行python脚本,以便服务器正在侦听 另外,get和post请求之间的区别是HTTP协议的一部分,而您的简单服务器对此一无所知。这主要意味着在ajax请求中使用什么动词并不重要。服务器侦听所有HTTP谓词类型
最后,我没有看到任何数据被返回到客户端。您需要执行类似ns.sendall(“一些响应”)的操作。构建简单http服务器的教程比比皆是,并展示了发送响应的不同方式。您需要一个web服务器,以便可以通过web浏览器发出请求 您可以使用flask或django之类的web框架,也可以使用webpy 从他们的网站上使用webpy的一个简单示例
import web
urls = (
'/(.*)', 'hello'
)
app = web.application(urls, globals())
class hello:
def GET(self, name):
if not name:
name = 'World'
return 'Hello, ' + name + '!'
if __name__ == "__main__":
app.run()
然后从javascript调用url(您的python函数)。非常感谢!这似乎是有道理的,我会做一些研究!出于好奇,你知道在没有微框架的情况下这类事情是否可能发生吗?当然有可能,但正如@RobertMoskal在回答中所说的那样,这将变得单调乏味,而且有这么多的图书馆,我认为除了教育之外,没有理由这样做。如果您不想为此使用框架,请查看例如或哪些是python标准库的一部分。