我正在使用上述方法&它适用于URL中的一个参数。
e.g。 Students/getstud/1
,其中应用了控制器/操作/参数格式。
现在我在Students控制器中有一个动作,它接受两个参数并返回一个JSON对象。
那么如何使用post方法使用$.getJSON()
发布数据?
类似的方法也是可以接受的。
关键是用AJAX调用控制器的动作。
答案 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中使用$_REQUEST
。http://php.net/manual/en/reserved.variables.request.php,Among $_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;
});