Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET(ApiController)/jQuery.ajax:从POST返回什么?_C#_Jquery_Asp.net_Ajax - Fatal编程技术网

C# .NET(ApiController)/jQuery.ajax:从POST返回什么?

C# .NET(ApiController)/jQuery.ajax:从POST返回什么?,c#,jquery,asp.net,ajax,C#,Jquery,Asp.net,Ajax,在从ApicController派生的控制器中的Post方法中,我应该返回什么来指示jQuery成功 我尝试了HttpResponseMessage,但jQuery将其视为一个错误(即使jQuery错误处理程序的参数显然具有200状态) jQuery如下所示: processParticipantEvent: function(parID, evtType, evtNotes, successFunction, errorFunction){ debugger; var requ

在从ApicController派生的控制器中的Post方法中,我应该返回什么来指示jQuery成功

我尝试了HttpResponseMessage,但jQuery将其视为一个错误(即使jQuery错误处理程序的参数显然具有200状态)

jQuery如下所示:

processParticipantEvent: function(parID, evtType, evtNotes, successFunction, errorFunction){
    debugger;
    var requestURL = '/api/participantevent';
    var json = {"parId" : parID, "evtType": evtType, "evtNotes": evtNotes};
    var jsonArray=JSON.stringify(json);
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: requestURL,
        data: jsonArray ,
        dataType: "json",
        success: function (data) { successFunction(data); },
        error: function (data) { errorFunction(data); }
    });
},
我读过这样一篇文章:它似乎涉及同一个问题,但我怀疑它没有数据,因为它对我不起作用


我要做的就是返回一个没有数据的普通旧2xx。

您的错误在于
请求URL
。它的值是绝对值,
http://api/participantevent
不存在。尝试使用相对值

var requestURL = './api/participantevent';
根据:

“json”:将响应评估为json并返回JavaScript 对象跨域“json”请求转换为“jsonp”,除非 请求的请求选项中包含jsonp:false。JSON 严格解析数据;任何格式不正确的JSON都将被拒绝并删除 将抛出一个分析错误从jQuery1.9开始,还需要一个空响应 拒绝;服务器应该返回null或{}响应。

因此,如果要使用jQuery ajax,必须返回有效的json字符串,只需在API控制器中使用以下命令:

返回Ok(新的{})


注意,这是一个jqueryajax“特性”,例如使用Angular来做一篇ajax文章,我可以使用
returnok()在我的控制器中,一切都按预期工作。

如果您得到一个OK响应,它可能不是一个有效的JSON。
我建议您检查浏览器中的HTTP响应,并尝试使用responseText运行JSON.parse函数,看看它是否失败。

正如@Beyers所述,使用OK()返回就可以了

我在这里创建了相同的结构并进行了工作

我的控制器有以下功能:

[Route("api/participantevent")]
public IHttpActionResult Test()
{
    return Ok("");
}
在客户端,我更改了您的功能,只是为了简化:

processParticipantEvent= function(){
    debugger;
    var requestURL = '/api/participantevent';
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: requestURL,
        data: [{'test': '1'}] ,
        dataType: "json",
        success: function (data) { alert('success'); },
        error: function (data) { alert('error'); }
    });
}
  • 我通常声明一个类,如下所示:

    公共类AjaxResult
    {

  • 3.您的ajax调用如下所示:

        $.ajax({
            type: "POST",
            dataType: 'json',
            url: /ControllerName/Action,
            data: { id: "Test"},
            success: function (data) { alert('success'); },
            error: function (data) { alert('error'); }
       });
    

    感谢您的回复,我非常感谢。事实上,URL确实可以解析,因为控制器中的代码实际上是在响应.ajax调用时执行的-只是一旦完成jquery,就会接收我发送的响应(HttpResponseMessage)作为一个错误,因此触发错误处理程序。无论如何,谢谢。如果需要javascript帮助,您也可以在这里发布responseText谢谢-这个答案的好处是它给了我返回类型(IHTTPActionResult)以及使用它的机制。感谢您的回复,我非常感谢。我将@Luiz回复标记为正确,因为它为我提供了更多的信息,但您的回复涵盖了类似的内容,谢谢您的努力。
    [HttpPost]
    public JsonResult Action(string id)
    {
        AjaxResult result = new AjaxResult();
        //Set the properties of result here...
        result.Success = true;
        result.messages.Add("Success");
        return Json(result);
    }
    
        $.ajax({
            type: "POST",
            dataType: 'json',
            url: /ControllerName/Action,
            data: { id: "Test"},
            success: function (data) { alert('success'); },
            error: function (data) { alert('error'); }
       });