【问题标题】:Getting an error " 'JSON' is undefined " in webservices在 Web 服务中收到错误“'JSON' is undefined”
【发布时间】:2012-12-29 07:15:57
【问题描述】:

我是 web 服务和 JSON 的新手。我正在 asp.net 中开发一个应用程序,它使用 Webservices 和 JSON 在 Ajax 调用中将数据发布到服务器。 在下面的函数 PostData 中,我收到一个错误:

 data: "{" + jsonObjectName + ":" + JSON.stringify(dataToSend) + "}",     as "json" is undefined. 

这里的 dataToSend 是一个包含我的数据的对象
submitType 是提交按钮 id(在页面中我有两个提交按钮,所以我通过 id 调用)

strMessagetoShow 是显示成功或失败的文本
strMethodToCall Webservice中调用了哪个方法?

function PostData(dataToSend, submitType, strMessagetoShow, strMethodToCall,        jsonObjectName) {   
 $.ajax({
    url: window.top.GetWsUrl() + "/" + strMethodToCall,
    type: "POST",
    dataType: "json",
    data: "{" + jsonObjectName + ":" + JSON.stringify(dataToSend) + "}",
    timeout: 30000,     
    contentType: "application/json; charset=utf-8",
    success: function (data) {
        return data;
    },
    error: function (result) {
        alert(result.status + ' ' + result.statusText);
    }
 });
}

【问题讨论】:

  • 谢谢@adeneo,我做到了,但我仍然遇到同样的错误。
  • 如果像问题中那样引用它,那么您的引号似乎有问题。注意问题中的颜色,传递的数据不再是一个对象,它是一个东西......嗯,好吧,否则?
  • 请参考link

标签: jquery asp.net ajax json web-services


【解决方案1】:

JSON.stringifyJSON.parse 大写字母(javascript 区分大小写)。

另外,在对象中使用变量时,你必须这样做:

var obj = {};
    obj[jsonObjectName] = JSON.stringify(dataToSend);

$.ajax({
    ....
    data: obj,
    timeout: 30000,     
    ....etc
});

【讨论】:

  • @RavinderGangadher - 我只是说,在较新的浏览器中与 JSON 对象相关的任何函数都需要您引用正确的对象,即带有大写字母的 JSON。
【解决方案2】:

试试这个,看看是否有帮助:

function PostData(dataToSend, submitType, strMessagetoShow, strMethodToCall, jsonObjectName) {   
 $.ajax({
    url: window.top.GetWsUrl() + "/" + strMethodToCall,
    type: "POST",
    dataType: "json",
    data: {jsonObjectName : JSON.stringify(dataToSend)}, // or $.parseJSON(dataToSend)
    timeout: 30000,     
    contentType: "application/json; charset=utf-8",
    success: function (data) {
        return data;
    },
    error: function (result) {
        alert(result.status + ' ' + result.statusText);
    }
 });
}

这里有什么变化:

改变了这个:

  "{" + jsonObjectName + ":" + json.stringify(dataToSend) + "}"

到这里:

 {jsonObjectName : JSON.stringify(dataToSend)}

【讨论】:

  • 您能否以 cmets 的身份提及您所做的更改.. 以便我理解..(我是 OP)
  • @Mr_Green - 应该很明显,它是数据对象。现在它是一个对象,在问题中它是某种带有变量的字符串,这是行不通的。
  • @Mr_Green - 在什么浏览器中?
  • 我在 IE、Chrome 和 Mozilla 中测试过
  • 当使用JSON.stringify Crome 和Firefox 时,如果你打开控制台,JSON 是未定义的?
【解决方案3】:

确保包含 JSON 库。有关 API,请参阅 https://github.com/douglascrockford/JSON-js/blob/master/json2.js

JSON.stringify(value, replacer, space)

【讨论】:

    猜你喜欢
    • 2015-10-11
    • 2019-01-15
    • 1970-01-01
    • 2014-10-07
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 2011-01-19
    • 1970-01-01
    相关资源
    最近更新 更多