关于jquery:如何使用getJSON,使用post方法发送数据?

How to use getJSON, sending data with post method?

我正在使用上面的方法,它适用于URL中的一个参数。

例如 Students/getstud/1应用控制器/操作/参数格式。

现在我在Students控制器中有一个动作,它接受两个参数并返回一个JSON对象。

那么如何使用post方法使用$.getJSON()发布数据?

类似的方法也是可以接受的

关键是用AJAX调用控制器的动作。


$ .getJSON()方法执行HTTP GET而不执行POST。你需要使用$ .post()

1
2
3
4
$.post(url, dataToBeSent, function(data, textStatus) {
  //data contains the JSON object
  //textStatus contains the status: success, error, etc
},"json");

在该调用中,dataToBeSent可以是您想要的任何内容,但如果要发送html表单的内容,则可以使用serialize方法从表单中为POST创建数据。

1
var dataToBeSent = $("form").serialize();


这是我的"一线"解决方案:

1
$.postJSON = function(url, data, func) { $.post(url+(url.indexOf("?") == -1 ?"?" :"&")+"callback=?", data, func,"json"); }

为了使用jsonp和POST方法,此函数将"回调"GET参数添加到URL。这是使用它的方法:

1
2
3
$.postJSON("http://example.com/json.php",{ id : 287 }, function (data) {
   console.log(data.name);
});

服务器必须准备好处理回调GET参数并返回json字符串:

1
jsonp000000 ({"name":"John","age": 25});

其中"jsonp000000"是回调GET值。

在PHP中,实现如下:

1
print_r($_GET['callback']."(".json_encode($myarr).");");

我做了一些跨域测试,似乎工作。仍需要更多测试。


只需将这些行添加到(在加载jQuery之后但在发布任何内容之前的某个地方):

1
2
3
4
$.postJSON = function(url, data, func)
{
    $.post(url, data, func, 'json');
}

$.postJSON替换(部分/全部)$.getJSON并享受!

您可以使用与$.getJSON相同的Javascript回调函数。
不需要服务器端更改。 (好吧,我总是建议在PHP中使用$_REQUEST .http://php.net/manual/en/reserved.variables.request.php,在$ _REQUEST,$ _GET和$ _POST中哪一个最快?)

这比@ lepe的解决方案简单。


我有代码正在做getJSON。我只是用帖子替换它。令我惊讶的是,它奏效了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
   $.post("@Url.Action("Command")", { id: id, xml: xml })
      .done(function (response) {
           // stuff
        })
        .fail(function (jqxhr, textStatus, error) {
           // stuff
        });



    [HttpPost]
    public JsonResult Command(int id, string xml)
    {
          // stuff
    }

我刚用过post和if:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
data = getDataObjectByForm(form);
var jqxhr = $.post(url, data, function(){}, 'json')
    .done(function (response) {
        if (response instanceof Object)
            var json = response;
        else
            var json = $.parseJSON(response);
        // console.log(response);
        // console.log(json);
        jsonToDom(json);
        if (json.reload != undefined && json.reload)
            location.reload();
        $("body").delay(1000).css("cursor","default");
    })
    .fail(function (jqxhr, textStatus, error) {
        var err = textStatus +"," + error;
        console.log("Request Failed:" + err);
        alert("Fehler!");
    });

$.getJSON()非常便于发送AJAX请求并将JSON数据作为响应返回。唉,jQuery文档缺少一个名为$.postJSON()的姐妹函数。为什么不使用$.getJSON()并完成它?好吧,也许你想发送大量的数据,或者在我的情况下,IE7只是不想使用GET请求正常工作。

确实,目前没有$.postJSON()方法,但您可以通过在$.post()函数中指定第四个参数(类型)来完成相同的操作:

我的代码看起来像这样:

1
2
3
$.post('script.php', data, function(response) {
  // Do something with the request
}, 'json');


如果你只有两个参数,你可以这样做:

1
2
3
4
5
$.getJSON('/url-you-are-posting-to',data,function(result){

    //do something useful with returned result//
    result.variable-in-result;
});