ajax GET工作,POST给出400错误

时间:2014-03-18 01:37:39

标签: c# javascript ajax

GetData(...)方法没问题,但SetSimple(...)方法抛出错误400。

使用Javascript:

$.ajax(url,
        {
            type: action,
            timeout: 3000,
            data: { value: 123 },
            contentType: "application/json; charset=utf-8",
            //dataType: "json",
            success: function (data, textStatus, jqXHR) {
                displayInfo("success: "+data);
            },
            error: function(jqXHR, textStatus, errorThrown ) {
                displayInfo("error: "+errorThrown+" "+textStatus);
            }
        }
   );

C#:

[WebGet(RequestFormat = WebMessageFormat.Json)]
    string GetData(int value);

[WebInvoke(RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, Method = "POST")]
    string SetSimple(int value);

要运行/测试它我在浏览器中打开了服务,然后在另一个浏览器中使用javascript我的测试页面。 (而dataType:“json”似乎没有帮助。) 并且fiddler响应显示“服务器在处理请求时遇到错误。请参阅服务器日志以获取更多详细信息”,但我在事件日志中看不到任何内容。任何人都会看到我做错了什么?

2 个答案:

答案 0 :(得分:2)

您应该将JavaScript对象转换为字符串。

JSON.stringify(data)

然后在你的例子上

$.ajax (url,
    {
        type: action,
        timeout: 3000,
        data: JSON.stringify({ value: 123 }),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data, textStatus, jqXHR) {
            displayInfo("success: "+data);
        },
        error: function(jqXHR, textStatus, errorThrown ) {
            displayInfo("error: "+errorThrown+" "+textStatus);
        }
    }

);

答案 1 :(得分:0)

您的ajax请求正在将“data”属性设置为{value:123}。您需要将适当的对象传递给CompositeObject的SetObject方法。 ajax请求看起来像是将它用作实用程序函数,因此只需将数据作为参数传递,以便ajax请求为:

    var makeAjaxCall = function(url, action, data) {
        $.ajax(url,
            {
                type: action,
                timeout: 3000,
                data: data,
                contentType: "application/json; charset=utf-8",
                success: function (data, textStatus, jqXHR) {
                    displayInfo("success: "+data);
                },
                error: function(jqXHR, textStatus, errorThrown ) {
                    displayInfo("error: "+errorThrown+" "+textStatus);
                }
            }
       );
    }