gpt4 book ai didi

javascript - 为什么get不提供任何参数

转载 作者:行者123 更新时间:2023-12-03 05:20:38 25 4
gpt4 key购买 nike

我已经将数据发布到我的 MVC Controller ,没有任何问题(使用 ajax post 和 HttpPost)。

我遇到的问题是,它是异步的,我需要它发布并等待响应。

因此,有get

但是,当我这样做时,永远不会传递参数。

我的 JavaScript 是

//the type is "GET"
function toDatabase(type, url, data, successDelegate, failDelegate, errorDelegate) {
$.ajax({
type: type.toUpperCase(),
url: url,
contentType: "application/json;",
data: data,
dataType: "json",
success: function (response) {
successDelegate(response); removeSpinner();
},
failure: function (e) {
failDelegate(e.statusText); removeSpinner();
},
error: function (e) {
errorDelegate(e.statusText); removeSpinner();
}
})
}

我的 Controller 是

[HttpGet]
public JsonResult SaveNewStagePlan(string name)
{
//todo save
if (String.IsNullOrEmpty(name))
return Json(new { id = -99 }); //always returns as name is null
}

我做错了什么?它在发布(并使用 HttpPost)时工作正常。

编辑

data 的值为 {"name":"MyBand"},由另一个传递 JSON.stringify({ 'name': localVariableBandName }) 的函数创建

最佳答案

JSON.stringify 方法采用 js 对象并返回该对象的字符串化版本。例如,如果将 js 对象 { name: 'shyju' } 传递给此方法,您将得到字符串 {"name":"shyju"}

当 ajax 调用为 GET 类型时,数据作为查询字符串值发送。 $.ajax 方法会根据需要将您在 data 属性中传递的 js 对象转换为 querystring 键值对并发送。

所以基本上你当前的代码是像这样发送查询字符串

Home/SaveNewStagePlan?{"name":"shyju"}`

所以你可以清楚地看到这不是一个有效的查询字符串!理想情况下应该是 Home/SaveNewStagePlan?name=shyju

因此,解决方案是将 js 对象按原样(而不是对象的字符串化版本)传递给 $.ajax 调用。

这应该有效。

$.ajax({
type: "GET",
url: url,
data: { name: 'shyju' },
success: function(response) {
console.log(response);
},
failure: function(e) {
},
error: function(e) {
}
});

由于它将数据作为查询字符串发送,因此您不需要将 contentType 指定为“application json”(但它仍然可以使用)。

此外,无需显式指定 dataType 为 json,因为您的代码始终返回 json 数据。

此外,如果您的操作方法是 GET 操作方法,您需要明确指定您要从中返回 JSON 数据。您可以使用 Json 方法的重载,该方法采用 JsonRequestBehavior 枚举值。

 return Json(new { id = -99 }, JsonRequestBehavior.AllowGet); 

关于javascript - 为什么get不提供任何参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41401780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com