117

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

例如Students/getstud/1,应用控制器/动作/参数格式的地方。

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

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

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

重点是用 AJAX 调用控制器的动作。

4

7 回答 7

227

$.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();
于 2009-04-15T11:59:16.243 回答
12

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

$.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).");");

我做了一些跨域测试,它似乎工作。不过还需要更多的测试。

于 2010-09-29T03:49:16.650 回答
7

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

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

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

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

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

于 2015-03-15T18:08:12.540 回答
3

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

   $.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
    } 
于 2013-09-27T14:38:06.683 回答
3

我只是使用了 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!");
    });
于 2016-11-16T11:23:20.860 回答
1

$.getJSON()对于发送 AJAX 请求和获取 JSON 数据作为响应非常方便。唉,jQuery 文档缺少一个应该命名为$.postJSON(). 为什么不直接使用$.getJSON()并完成它呢?好吧,也许您想发送大量数据,或者在我的情况下,IE7 只是不想与 GET 请求一起正常工作。

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

我的代码如下所示:

$.post('script.php', data, function(response) {
  // Do something with the request
}, 'json');
于 2014-09-05T19:58:20.333 回答
-8

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

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

    //do something useful with returned result//
    result.variable-in-result;
});
于 2010-07-20T18:35:15.990 回答