0

这是我的ajax帖子:

$.ajax({
    type: "POST",
    url: "AddUpdateConfigs",
    data: ({id: @Model.QueueMonitorConfigurationsID, pathType: $('#ddlConfigTypeName').val(), threshold:$('#ddlThreshold').val(), valueType:$('#ddlValueTypeName').val(), location: $('#txtbLocation').val(), limit: $('#txtbLimit').val(), config: $('#NewOrUpdate').val() }),
    dataType: JSON,
    statusCode: {
        404: function() {
            alert("Data is duplicated");
        },
        405:function(){
            alert("Location Path is not correct");
        },
        406: function(){
            alert("Location Path has to be UNC path");
        },
        407: function(error){
            alert(error);
        }
    },
    success: function() 
    { 
        alert ("Success");
    }
});

它在开始时效果很好,并且AddUpdateConfigs调用了该函数。该函数以return Json(result);whereresult为真结束。

然后我success没有开火,因为我没有得到alert

请有任何想法,我做错了什么?

谢谢

4

5 回答 5

0

首先,在你的控制器方法上,你应该使用这个:

return Json(result, JsonRequestBehaviour.AllowGet);

基本上,如果您的操作方法不返回敏感数据,那么允许获取应该是安全的。

但是,MVC将此设置DenyGet为默认设置以保护您免受此攻击。它使您在决定将其公开之前考虑要公开的数据的含义HTTP GET

在您的 AJAX 中,将您的更改ContentType

contentType: 'application/json'

JS:

var queueMonitor = { id: @Model.QueueMonitorConfigurationsID,
                     pathType: $('#ddlConfigTypeName').val(),
                     threshold:$('#ddlThreshold').val(),
                     valueType:$('#ddlValueTypeName').val(),
                     location: $('#txtbLocation').val(),
                     limit: $('#txtbLimit').val(),
                     config: $('#NewOrUpdate').val() };

$.ajax({
            url: 'AddUpdateConfigs ',
            type: 'POST',
            contentType: 'application/json',
            data: JSON.stringify({ parameterName: queueMonitor }),
            success: function() { 
                alert("Success");
            }
        });

控制器:

[HttpPost]
public JsonResult AddUpdateConfigs(QueueMonitor parameterName)  //Note parameter being same as that passed in AJAX Call.
{
   //Logic 

   return Json(result, JsonRequestBehaviour.AllowGet);
}
于 2013-06-10T18:22:18.260 回答
0
success: function() 

这应该是

success: function(data) 
于 2013-06-10T18:30:45.430 回答
0

没关系,我使用以下方法解决了它:

[HttpPost]
public ActionResult AddUpdateConfigs(int id, string pathType, string threshold, string valueType, string location, int limit, string config)
{return new HttpStatusCodeResult(410, "New Data inserted");}

和:

$.ajax({
        type: "POST",
        url: "AddUpdateConfigs",
        data: ({id: @Model.QueueMonitorConfigurationsID, pathType: $('#ddlConfigTypeName').val(), threshold:$('#ddlThreshold').val(), valueType:$('#ddlValueTypeName').val(), location: $('#txtbLocation').val(), limit: $('#txtbLimit').val(), config: $('#NewOrUpdate').val() }),
        dataType: 'application/json',
        statusCode: {
            404: function(){
                alert("Data is duplicated");
            },
            405:function(){
                alert("Location Path is not correct");
            },
            406: function(){
                alert("Location Path has to be UNC path");
            },
            407: function(error){
                alert(error);
            },
            410:function(result){
                alert("Item added correctly");

            },
            411:function(result){
                alert("Item updated correctly");
            }
        }
    });
于 2013-06-10T19:15:43.653 回答
0

我的成功没有触发,因为我没有成功返回,我使用的是随机错误代码,因为我认为我可以给他们这样的数字。

于 2013-06-18T20:15:58.817 回答
0

就我而言,这是因为表单行为在到达成功/错误事件之前关闭

preventDefault()解决了

于 2017-08-28T14:21:51.710 回答