JSON数据作为字符串工作,但在对象时抛出内部错误

时间:2016-12-24 10:20:51

标签: javascript jquery asp.net ajax

我正在使用这样的AJAX帖子:

$.ajax({
        type: "POST",
        url: "/AJAXServices.aspx/" + method,
        data: params,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(data) {
            successfunc();
        },
        error: function(data) {
            errorfunc();
        }
    });

当我使用变量" params"像这样:

var params = '{"QuestionID":"' + UpdateQuestion_ID + '", "NewText":"' + newText + '"}';

有效。

但是当我改变它时:

var params = { QuestionID: UpdateQuestion_ID, NewText: newText };

这会在服务器端抛出内部服务器错误:

  

无法加载资源:服务器响应状态为500   (内部服务器错误)

服务器端方法:

    [WebMethod]
    public static void UpdateQuestion(string QuestionID, string NewText)
    {
        ....
     }

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我的第一种情况params是一个字符串,而在第二种情况下params是一个对象。

我猜服务器需要一个有效的json字符串。确保params是一个对象,并在发送之前使用JSON.stringify()将其转换为有效的JSON字符串。

$.ajax({
    ...
    data: JSON.stringify(params),
    ...
});

答案 1 :(得分:1)

JavaScript对象和JSON看起来非常相似,但差别很小。

有效的JSON必须将密钥包装在“”内,但可以在没有“”的情况下编写JS对象密钥。

下面的示例是有效的JS对象,但无效的JSON

  

{     名称:“拉维”,     国家:“印度”   }

因此,下面是相同的有效JSON:

  

{     “名字”:“拉维”,     “国家”:“印度”   }

此外,服务器端,它会因为它是InValid JSON而中断。

您可以在http://www.jsoneditoronline.org/

验证您的JSON

注意:您可以使用

将任何JS对象转换为有效的JSON
  

JSON.stringify(JavaScript_Object);

示例:

  

var a = {name:“Ravi”,country:“India”}

从JS-Obj转换为JSON

  

var b = JSON.stringify(a);

现在,var b是一个有效的JSON。

  

输出:“{”name“:”Ravi“,”country“:”India“}”