最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

AJAX Post to store JSON with Python and javascript - Stack Overflow

programmeradmin2浏览0评论

I have been having problems with getting AJAX to post JSON correctly. The application is intended to be hosted on Google App Engine. But what I have does not post data.

Python

 mainPage = """
    <html>
    html is included in my python file.
    </html>
    """ 

    class JSONInterface(webapp2.RequestHandler):
    def post(self):
        name =self.request.get('name')
        nickname =self.request.get('nickname')

        callback = self.request.get('callback')
        if len(name) > 0 and len(nickname) >0:
            newmsg = Entry(name=name, nickname=nickname)
            newmsg.put()
        if len(name)>0:
            self.response.out.write(getJSONMessages(callback))
        else:
            self.response.out.write("something didnt work")

    def get(self):
        callback = self.request.get('callback')
        self.response.out.write(getJSONMessages(callback))

This handler is meant to handle the Ajax calls from the web app. I am unsure if I need javascript to be associated with my main page in order to do so, as I haven't found information on it yet with my searches.

Javascript

$(document).ready( function() {

    $("#post").bind('click', function(event){
           var name = $("#name").val();
           var nickname = $("#nickname").val();

            postData = {name: name, nickname: nickname, callback: "newMessage"};

        $.ajax({
            type: "POST",
            url: "http://localhost:27080/json",
            data: postData,
            dataType: "json",
            done: function() {
                // Clear out the posted message...
                $("#nickname").val('');
            },
            fail: function(e) {
                confirm("Error", e.message);
            }
        });
        // prevent default posting of form (since we're making an Ajax call)...
        event.preventDefault();
    });

The Javascript for the post

Can someone advise me on how I could resolve the problem I am having. Thanks for the time and help.

I have been having problems with getting AJAX to post JSON correctly. The application is intended to be hosted on Google App Engine. But what I have does not post data.

Python

 mainPage = """
    <html>
    html is included in my python file.
    </html>
    """ 

    class JSONInterface(webapp2.RequestHandler):
    def post(self):
        name =self.request.get('name')
        nickname =self.request.get('nickname')

        callback = self.request.get('callback')
        if len(name) > 0 and len(nickname) >0:
            newmsg = Entry(name=name, nickname=nickname)
            newmsg.put()
        if len(name)>0:
            self.response.out.write(getJSONMessages(callback))
        else:
            self.response.out.write("something didnt work")

    def get(self):
        callback = self.request.get('callback')
        self.response.out.write(getJSONMessages(callback))

This handler is meant to handle the Ajax calls from the web app. I am unsure if I need javascript to be associated with my main page in order to do so, as I haven't found information on it yet with my searches.

Javascript

$(document).ready( function() {

    $("#post").bind('click', function(event){
           var name = $("#name").val();
           var nickname = $("#nickname").val();

            postData = {name: name, nickname: nickname, callback: "newMessage"};

        $.ajax({
            type: "POST",
            url: "http://localhost:27080/json",
            data: postData,
            dataType: "json",
            done: function() {
                // Clear out the posted message...
                $("#nickname").val('');
            },
            fail: function(e) {
                confirm("Error", e.message);
            }
        });
        // prevent default posting of form (since we're making an Ajax call)...
        event.preventDefault();
    });

The Javascript for the post

Can someone advise me on how I could resolve the problem I am having. Thanks for the time and help.

Share Improve this question edited May 10, 2013 at 21:47 OasisTea asked May 10, 2013 at 21:21 OasisTeaOasisTea 671 silver badge7 bronze badges 6
  • I would maybe try adding contentType: "application/json", – mconlin Commented May 10, 2013 at 21:40
  • I have on my mainpage handler. def get(self): self.response.headers['Content-Type'] = 'text/html' self.response.out.write(mainPage) Which is just used to return the page. – OasisTea Commented May 10, 2013 at 21:45
  • Are your route handlers in the python file configured correctly? ALso, you are using jQuery? The leading $ is omitted. Should be $(document).ready(). But make sure your handler points ('/json', JSONInterface). – rGil Commented May 10, 2013 at 21:45
  • Yes I am using Jquery, and I made a mistake on my copy and paste. $ is part of it. Thank you for pointing it out in my post. – OasisTea Commented May 10, 2013 at 21:46
  • I assumed was copy/paste issue :) – rGil Commented May 10, 2013 at 21:49
 |  Show 1 more ment

2 Answers 2

Reset to default 3

Did you ask the same question yesterday and then delete it? I swear I just answered the same question.

You're not sending your data as a JSON string. If you want to send as JSON, you need to encode data as a JSON string, or else you're just sending it as a query string.

data: JSON.stringify(postdata),

HOWERVER, your request handler is actually processing the request properly as query string instead of JSON, so you probably don't want to do that.

For starters, the ajax call is pretty close. The full path

"http:://localhost:27080/json"

is not necessary, the relative path will work, but that is not the problem.

Your callback, as it stands, will work as 'success':

success: function(response) {
            alert(response);

            // Clear out the posted message...
            $("#nickname").val('');
        }

However, this callback is being phased out in favor of other methods. 'Done' should be chained like so:

 $.ajax({
        type: "POST",
        url: "/json",
        data: postData,
        dataType: "json"            
    }).done(function(data){
        console.log(data);
    });

Also, there might be problems on the server. If you use some logging, you will see that the data is indeed being sent to the server.

import json ## we'll get to this below
import logging
class JSONInterface(webapp2.RequestHandler):
def post(self):
    name = self.request.get('name')
    logging.info(name) ## will print the value of 'name'

Unless your python function getJSONMessages(callback) is returning a json object, your callback will not be called, even after you add the response parameter. In your python code:

import json
import logging
class JSONInterface(webapp2.RequestHandler):
    def post(self):
        callback = self.request.get('callback')
        logging.info(callback) # will print correctly
        self.response.out.write(json.dumps(callback)) 

Using the json.dumps method encodes the passing object to json, which is what your ajax object is looking for.

发布评论

评论列表(0)

  1. 暂无评论