1

我一直无法让 AJAX 正确发布 JSON。该应用程序旨在托管在 Google App Engine 上。但是我所拥有的并没有发布数据。

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

此处理程序旨在处理来自 Web 应用程序的 Ajax 调用。我不确定是否需要将 javascript 与我的主页相关联才能这样做,因为我还没有通过搜索找到关于它的信息。

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();
    });

帖子的 Javascript

有人可以告诉我如何解决我遇到的问题。感谢您的时间和帮助。

4

2 回答 2

3

你昨天是不是问了同样的问题然后删掉了?我发誓我刚刚回答了同样的问题。

您没有将您的data作为 JSON 字符串发送。如果您想以 JSON 格式发送,则需要编码data为 JSON 字符串,否则您只是将其作为查询字符串发送。

data: JSON.stringify(postdata),

但是,您的请求处理程序实际上将请求作为查询字符串而不是 JSON 正确处理,因此您可能不想这样做。

于 2013-05-11T03:01:33.820 回答
0

对于初学者来说,ajax 调用非常接近。完整路径

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

没有必要,相对路径会起作用,但这不是问题。

就目前而言,您的回调将作为“成功”工作:

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

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

但是,此回调正在逐步淘汰,取而代之的是其他方法。“完成”应该像这样链接:

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

另外,服务器可能有问题。如果您使用一些日志记录,您将看到数据确实正在发送到服务器。

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'

除非您的 python 函数 getJSONMessages(callback) 返回一个 json 对象,否则即使您添加了响应参数,您的回调也不会被调用。在您的 python 代码中:

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

使用json.dumps 方法将传递的对象编码为 json,这是您的 ajax 对象正在寻找的。

于 2013-05-11T00:38:38.083 回答