【问题标题】:How to return and use an array of strings from a jQuery ajax call?如何从 jQuery ajax 调用中返回和使用字符串数组?
【发布时间】:2011-04-22 16:24:24
【问题描述】:

我正在使用 Google App Engine (Python) 和 jQuery 对服务器进行 Ajax 调用。我有一个页面,我想在其中加载从 Ajax 调用到服务器的 Javascript 字符串列表。

我要调用的服务器方法:

class BrowseObjects(webapp.RequestHandler):
    def get(self):
        ids_to_return = get_ids_to_return()
        // TODO: How to return these ids to the invoking ajax call?
        self.response.out.write(ids_to_return)

我希望能够访问返回的 ID 的 HTML 页面:

    var strings_from_server = new Array();

    $.ajax({
        type: "GET",
        url: "/get_ids.html",
        success: function(responseText){
            // TODO: How to read these IDS in here?
            strings_from_server = responseText                
        },
            error: function (xhr, ajaxOptions, thrownError){
            alert(xhr.responseText);
        }
    });

我在 Ajax 方面的经验有限——我只使用它们将数据存储到服务器(a-la POST 命令),所以我真的不知道如何从服务器取回数据。提前感谢所有帮助

编辑:我的最终答案:

我已切换到完整的 Ajax 调用(以防止跨域请求)并处理“错误”回调。我的工作客户端方法如下所示:

         $.ajax({
            type: "GET",
            dataType: "json",
            url: "/get_ids.html",
            success: function(reponseText){
                strings_from_server = responseText                
            },
            error: function (xhr, ajaxOptions, thrownError){
                    alert(xhr.responseText);
            }
        });

请注意,我将 dataType 指定为“json”。
而我的最终服务器功能,以及 sahid 的回答,看起来像:

class BrowseObjects(webapp.RequestHandler):
    def get(self):
        ids_to_return = get_ids_to_return()
        # Note: I have to map all my objects as `str` objects
        response_json = simplejson.dumps(map(str, ids_to_return))
        self.response.out.write(response_json)

谢谢大家!

【问题讨论】:

标签: javascript jquery python ajax google-app-engine


【解决方案1】:

django 提供的 Google AppEngine SDK 的 lib "simplejson"。

from django.utils import simplejson

所以你的处理程序可能只是:

from django.utils import simplejson
class BrowseObjects(webapp.RequestHandler):
    def get(self):
       ids_to_return = get_ids_to_return()
       response_json = simplejson.dumps (ids_to_return)
       self.response.out.write(response_json)

有一篇关于ajax/rpc的好文章:http://code.google.com/appengine/articles/rpc.html

【讨论】:

  • 谢谢,我会的。使用这个 =)
  • 我不知道应用引擎支持 simplejson。谢谢!
【解决方案2】:

这可能不是最干净的解决方案,但它会起作用。由于它们只是 ID,因此将它们直接推送到字符串中听起来很安全。

class BrowseObjects(webapp.RequestHandler):
    def get(self):
       ids_to_return = get_ids_to_return()

       response_html = '["'
       response_html += ids_to_return.join('","')
       # Edit: since my ids are Key objects (not strings)
       # I had to use the following instead:
       # response_html += '","'.join(map(str, ids_to_return))
       response_html += '"]'

       self.response.out.write(response_html)

var strings_from_server = new Array();

$.getJSON("/get_ids.html", function(responseData){

    strings_from_server = responseData;

});

如果出现错误,您可以检查响应是否为空,并且可以使用 $.each 循环遍历结果。

我正在使用 jQuerys getJSON 功能来自动解析响应。由于我只是返回一个 json 列表,它会在 strings_from_server 变量中生成数据数组。

【讨论】:

  • 效果很好。我在答案中添加了一条评论,因为我错了——毕竟我的 id 不是字符串,它们是一种对象类型。您的解决方案效果很好,谢谢!
  • 很高兴它成功了,并且你明白我做了什么。如果您知道如何将错误触发器添加到该 getJSON 调用中,请在此处发布。我很想看看它的样子。
  • 我不确定,但通过阅读这里api.jquery.com/jQuery.ajax 我认为您可以使用 jQuery 进行常规 ajax 调用并将 JSON 指定为返回类型。由于它是一个 reg ajax 调用,它可以让您通过指定错误回调来处理错误。
  • Shane,如果您查看答案,我切换到了一个更安全的解决方案,它允许在回调中处理错误。再次感谢您的帮助。
猜你喜欢
  • 2012-08-09
  • 1970-01-01
  • 2019-10-05
  • 1970-01-01
  • 2012-10-08
  • 1970-01-01
  • 2021-08-16
  • 1970-01-01
  • 2012-12-04
相关资源
最近更新 更多