我的Ajax帖子没有取得成功

时间:2013-06-10 18:16:57

标签: c# asp.net-mvc jquery

这是我的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);完成,其中result为真。

然后我的success没有被解雇,因为我没有得到alert

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

谢谢

5 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

success: function() 

这应该是

success: function(data) 

答案 2 :(得分: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");
            }
        }
    });

答案 3 :(得分:0)

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

答案 4 :(得分:0)

对于我的情况,这是因为表格beaviour,在达到成功/错误事件之前关闭

preventDefault()解决了它