通过GQuery请求中的jQuery的$ .load()将Json发送到Django

时间:2011-08-26 22:53:02

标签: django json jquery get

快乐编码周末给大家!!!。

我试图通过jQuery的$ .load()发送一个JSON对象,我想用GET方法发送它,这是我在javascript代码中的代码,我附加了Ajax请求为清晰起见,收到JSON对象:

function ajaxLoadClasses() {
    $.ajax({
        url: 'load_classes/',
        type: 'GET',
        dataType: 'json',
        success: function(json) {
            $.each(json, function(iterator,item) {
                              loadViaGet(item);
            });
        },
        error: function(xhr, status) {
            alert('Sorry, there was a problem!');
        },
        complete: function(xhr, status) {},
    });
}


function loadViaGet(item) {
    $div = $('div.myClass');
    //Here is where I'm stuck, I'm not sure if this is the way to send the JSON obj
    $div.load('thisAppURL/?json=' + encodeURIComponent(item), function() { 
        alert('Load was performed');
    });
}

收到的“item”json obj是使用

的Django模型制作的
jsonToSendToAjax = serializers.serialize('json', obj)

我不认为我在Django中使用正确的方法来反序列化JSON对象或将JSON对象转换为Python对象,因此我可以在视图中处理它并将其发送到模板:

def popUpForm(request):
    jsonData = request.GET['json']

    deser = serializers.deserialize('json', jsonData)

    #This could be another way to convert the JSON object to a Python Object
    #pythonObj = simplejson.loads(jsonData)

    return render_to_response('class_pop_up_form.html', deser)

如果有人可以帮助我这将是非常有帮助的!我真的很挣扎,但我找不到正确的方法。

编辑1: 我希望通过GET使用$ .load()函数发送JSON对象,而不是使用POST方法,因为我在jQuery api中读到:http://api.jquery.com/load/ $ .load()方法的工作原理如下:。 load(url,[data],[complete(responseText,textStatus,XMLHttpRequest)])

如果数据作为对象提供,则使用POST方法;否则,假设GET。

编辑2: 忘记通过GET方法发送json对象,现在我正在使用POST方法,但现在我不知道如何在我的Django View.py中使用那个json对象,不知道我是否需要反序列化是不是,我正在使用的json对象的格式如下:

{"pk": 1,
"model": "skedified.class",
"fields": {
      "hr_three": null,
      "group": 1,
      "name": "Abastecimiento de agua",
      "day_three": null,
      "day_one": "1 , 3",
      "hr_one": "10+/3",
      "online_class": null,
      "teacher_name": "Enrique C\\u00e1zares Rivera /   ",
      "day_two": null,
      "class_key": "CV3009",
      "hr_two": null }
}

2 个答案:

答案 0 :(得分:2)

这不是jQuery建议你应该发送数据的方式,也不是这样做的好主意。如果你像这样添加json字符串,那么你的网址会非常难看并且很快。

使用$ .load的第二个参数; “数据”(请参阅​​http://api.jquery.com/load/)。像

这样的东西
$div.load('thisAppURL', {"json": encodeURIComponent(item)});

此外,如果你想跟踪输出,我会使用第三个参数,回调函数,并使用控制台而不是警报来提取。你也可以通过这种方式从服务器获得实际的回报。所以你会得到类似的东西:

$div.load(
  'thisAppURL',
  {"json": encodeURIComponent(item)},
  function(response, status, xhr){
    console.log(response);
  }
);

答案 1 :(得分:0)

这个问题对我来说并不清楚,但你可以通过load发送json作为第二个参数

$div = $('div.myClass');
//Here is where I'm stuck, I'm not sure if this is the way to send the JSON obj
$div.load('thisAppURL/?json=' + encodeURIComponent(item),{"name":"john","age":"20"}, function() { 
    alert('Load was performed');
});

将javascript数组转换为json,请参阅此答案Convert array to JSON

用于在django Django Deserialization

中反序列化json