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

Vik*_*kas 104 asp.net-mvc jquery post http-post getjson

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

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

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

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

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

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

Erv*_*ter 211

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

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

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

var dataToBeSent = $("form").serialize();
Run Code Online (Sandbox Code Playgroud)

  • 只想添加$ .getJSON支持Jsonp(跨域访问),不幸的是$ .post没有. (5认同)
  • 实际上 .getJSON() 以两种方式支持跨域访问。JSONP,不使用 GET 或 POST,而是使用脚本注入;而且 CORS - 和 .post() 也支持 CORS。但是 CORS 要求服务器也支持它,而 JSONP 不支持。 (2认同)
  • 事实并非如此,JSONP还需要服务器支持来解析回调参数. (2认同)

lep*_*epe 13

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

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

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

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

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

jsonp000000 ({"name":"John", "age": 25});
Run Code Online (Sandbox Code Playgroud)

其中"jsonp000000"是回调GET值.

在PHP中,实现如下:

print_r($_GET['callback']."(".json_encode($myarr).");");
Run Code Online (Sandbox Code Playgroud)

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


Ler*_*erg 5

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

$.postJSON = function(url, data, func)
{
    $.post(url, data, func, 'json');
}
Run Code Online (Sandbox Code Playgroud)

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

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

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