如何使用getJSON,使用post方法发送数据?

时间:2009-04-15 11:15:57

标签: jquery asp.net-mvc post http-post getjson

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

e.g。 Students/getstud/1,其中应用了控制器/操作/参数格式。

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

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

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

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

7 个答案:

答案 0 :(得分:209)

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

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

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

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

答案 1 :(得分:13)

这是我的“一线”解决方案:

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

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

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

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

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

其中“jsonp000000”是回调GET值。

在PHP中,实现方式如下:

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

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

答案 2 :(得分:5)

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

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

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

您可以使用与$.getJSON相同的Javascript回调函数。 不需要服务器端更改。 (好吧,我总是建议在PHP中使用$_REQUESThttp://php.net/manual/en/reserved.variables.request.phpAmong $_REQUEST, $_GET and $_POST which one is the fastest?

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

答案 3 :(得分:3)

我有代码正在执行getJSON。我只是用帖子替换它。令我惊讶的是,它起作用了

   $.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
    } 

答案 4 :(得分:2)

我刚用过post和if:

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!");
    });

答案 5 :(得分:1)

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

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

我的代码看起来像这样:

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

答案 6 :(得分:-8)

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

$.getJSON('/url-you-are-posting-to',data,function(result){

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