使用AJAX在本地将数据从JavaScript发送到Python函数

时间:2015-08-27 11:24:31

标签: javascript jquery python ajax

我正在尝试构建一个用户可以输入文本的网站,该网站将通过javascript获取,然后发送到python函数,并将其发布到twitter。目前,python函数与本站的其余部分一起存储在本地。但是,我的AJAX并不太好,而且我遇到了一些问题。

我编写了AJAX代码,它使用推文向python函数发送POST请求,响应是整个python脚本。没有连接到我的脚本正在侦听的套接字。下面是AJAX函数和python脚本。有什么想法正在发生什么?

提前感谢您的帮助!

$(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)

3 个答案:

答案 0 :(得分:0)

您的问题是您正在使用对HTTP协议一无所知的纯套接字。查看FlaskBottle web微框架,了解如何将python脚本或函数转换为Web端点。

答案 1 :(得分:0)

您可以使用套接字完全编写一个简单的Web服务器,实际上您已经这样做了。但是,除了简单的练习之外,这种方法很快就会变得乏味。

例如,您的代码仅限于处理单个请求处理程序,这是您问题的核心。

帖子请求上的网址错误。在您的设置中,没有网址“tweet.py”的概念。如果你也在服务于jquery来自同一服务器的网页(但你不能),那网址实际上会有效。

您必须发布到“http://localhost:9999”,然后您可以获得所需的任何路径:“http://localhost:9999/foo”,“http://localhost:9999/boo”。只需确保首先从命令行运行python脚本,以便服务器正在监听。

get和post请求之间的区别也是HTTP协议的一部分,您的简单服务器对此一无所知。这主要意味着你在ajax请求中使用的动词无关紧要。您的服务器侦听所有HTTP谓词类型。

最后,我没有看到任何数据被返回给客户端。你需要做一些像ns.sendall(“Some response”)这样的事情。构建简单的http服务器的教程比比皆是,并显示了不同的发送响应方式。

答案 2 :(得分:0)

您需要一个网络服务器,以便您可以通过网络浏览器提出请求。

你可以使用像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函数)。