如何使用GET设置SimpleHTTP服务器的AJAX路径



我有一个字符串,存储在一个变量requestrongtr中,我想将该数据传递给SimpleHTTP python web服务器。我不确定如何将我拥有的AJAX实际连接到simpleHTTP服务器。

这是到目前为止我设置的ajax

$.ajax({
        url: "SOMEPLACE",
        data: {
            "key": request_str.toUpperCase()
        }
    });

下面是我使用的SimpleHTTP服务器的python代码。

"""
Serves files out of its current directory
Dosen't handle POST request
"""
import SocketServer
import SimpleHTTPServer
PORT = 9090
def move():
    """ sample function to be called via a URL"""
    return 'hi'
class CustomHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
    def do_GET(self):
        #Sample values in self for URL: http://localhost:9090/jsxmlrpc-0.3/
        #self.path  '/jsxmlrpc-0.3/'
        #self.raw_requestline   'GET /jsxmlrpc-0.3/ HTTP/1.1rn'
        #self.client_address    ('127.0.0.1', 3727)
        if self.path=='/move':
            #This URL will trigger our sample function and send what it returns back to the browser
            self.send_response(200)
            self.send_header('Content-type','text/html')
            self.end_headers()
            self.wfile.write(move()) #call sample function here
            return
        else:
            #serve files, and directory listings by following self.path from
            #current working directory
            SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)
httpd = SocketServer.ThreadingTCPServer(('localhost', PORT),CustomHandler)
print "serving at port", PORT
httpd.serve_forever()

我之所以问如何使用GET设置它,是因为服务器的设置方式。我愿意接受建议,并将其更改为POST,如果我能得到一个明确的解释。有人告诉我应该json数据,但我不确定这是什么意思。

期待您的帮助!

我假设您正在使用JQuery,因为$函数。参考JQuery文档会很有帮助:http://api.jquery.com/jquery.ajax/

url字段是请求将被发送到的地方。与任何url一样,您可以通过直接在url中键入GET变量来传递它们:

$.ajax() { url: 'SOMEPLACE?foo=bar&hello=world };

但是JQuery ajax对象也有一个数据字段。来自文档页面:"[数据字段]被转换为查询字符串,如果不是字符串的话。它被附加到get请求的url"。所以提交请求的另一种方式,也可能是json数据的意思是:

$.ajax() { url: 'SOMEPLACE', data: {foo: 'bar', hello: 'world'}};

还要注意,默认情况下,JQuery ajax请求是GET。您可以使用类型字段更改它。

$.ajax() { url: 'SOMEPLACE', data: {var1: 'val1', var2: 'val2'}, type: 'POST'};

对于服务器端python:我不认为服务器正在寻找get变量。它只是有一个基于url中的路径的条件。因此,如果您通过JavaScript正确发送get而没有获得行为-这是因为服务器端缺少逻辑。

看起来SimpleHTTPServer就是这么简单。因此,为了提取GET变量,必须进行一些字符串解析。考虑一些url解析函数:https://docs.python.org/2/library/urlparse.html#urlparse.parse_qs

对于前端AJAX调用,Toby进行了很好的总结。如果您想执行GET请求,请执行

$.get("http://localhost:9090/endpoint?thing1=val", ....

然后在服务器端,您需要添加一些东西

"""
Serves files out of its current directory
Dosen't handle POST request
"""
import SocketServer
import SimpleHTTPServer
from urlparse import urlparse
PORT = 9090
def move():
    """ sample function to be called via a URL"""
    return 'hi'
class CustomHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
    def do_GET(self):
        #Sample values in self for URL: http://localhost:9090/jsxmlrpc-0.3/
        #self.path  '/jsxmlrpc-0.3/'
        #self.raw_requestline   'GET /jsxmlrpc-0.3/ HTTP/1.1rn'
        #self.client_address    ('127.0.0.1', 3727)
    # Split get request up into components
    req = urlparse(self.path)
    # If requesting for /move
    if req.path =='/move':
            #This URL will trigger our sample function and send what it returns back to the browser
            self.send_response(200)
            self.send_header('Content-type','text/html')
            self.end_headers()
            self.wfile.write(move()) #call sample function here
            return
        else:
            #serve files, and directory listings by following self.path from
            #current working directory
            SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)
    # Else if requesting /endpoint
    elif req.path == '/endpoint':
        # Print request query
        print req.query
        # Do other stuffs...
httpd = SocketServer.ThreadingTCPServer(('localhost', PORT),CustomHandler)
print "serving at port", PORT
httpd.serve_forever()
基本上,您只需要添加一个区分GET请求的方法和一个解析它们发送的查询数据的方法。urlparse模块对此很有帮助。有关如何使用它的更多文档,请参阅https://docs.python.org/2/library/urlparse.html

相关内容

  • 没有找到相关文章

最新更新