【问题标题】:Sending data to server side from client side - INVALID JSON PRIMITIVE: location从客户端向服务器端发送数据 - 无效的 JSON PRIMITIVE:位置
【发布时间】:2012-04-13 19:37:14
【问题描述】:

目前,我有一个用户正在 ajax bing 地图上创建很多点。当用户按下“提交”按钮时,我想获取存储在 map.entities 中的所有位置,我构建了一个 xml 格式的字符串,我想将它保存在我的数据库中:

<locations> <location><lat><lon>1.234</lon></lat></location>.....</locations>

,所以在构建我的 XML 字符串之后,这不是问题,我将它存储在可变位置并执行:

$. ajax({ 
type: "POST",
url: "myPage.aspx/saveLocations"
data: {"xmlLoc: x"},
async: true,
cache: false,
success: alert ("success" + msg)
error: ....

但不幸的是,这似乎不是传递我的数据的方式。这是我唯一一次成功,但味精是未定义的!!!

如果我写 data: x,

我的服务器端代码:

[Web Method]
public static string saveLocations(string s)
{
    return s; //just for testing purposes
}

我不确定如果我必须使用 json 或其他东西,我是一个初学者,所以我不知道从哪里开始!非常感谢


编辑:我正在尝试另一种解决方法,但我总是收到无效的 json 原始错误!!!

var locations = '{ "location" : [';
function createBoundary() {                        
            for (x = 0; x < map.entities.getLength(); x++) {
                var pin = map.entities.get(x);
                locations += '{ "latitude": "' + pin.getLocation().latitude +'", "longitude": "' + pin.getLocation().longitude + '"},';
            }
locations += ']}';
jQuery.ajax({
                type: "POST",
                url: "Profiles_Schedules.aspx/GetXmlLoc",
                data:  eval("(" + locations + ")"),
                contentType: "application/json;charset=utf-8",
                datatype: "json",
                async: true,
                cache: false,
                success: function (msg) {
                    alert("Success " + msg.d);
                },
                error: function (x, e) {
                    alert("The call to the server side failed. " + x.responseText);
                }
            });
}

【问题讨论】:

  • 如果将数据设置为数据会发生什么:{"s: 'x'"}
  • 你不能这样写,我得到了一个意外的令牌}

标签: c# jquery asp.net json


【解决方案1】:

尝试添加数据类型:

dataType: "json",

我还认为您的数据应该是“s”而不是“xmlLoc”,因为这是您在操作中要寻找的内容。

并尝试更改您的操作:

[HttpPost]
public static string saveLocations(string s)
{
    return s; //just for testing purposes
}

【讨论】:

  • 非常感谢,我现在就试试看!
  • 我有语法错误,我什至无法解析 HttpPost,我应该参考一个特定的程序集吗?
【解决方案2】:

尝试将您的代码更改为以下内容:

data: {"s":"x"}

Even on JSON's site,如果你想要字符串到字符串,你必须用引号格式化你的键/值对。不过,我建议您将密钥命名为与参数相同。

根据the MSDN on WebMethod,我最初认为这可能无法通过 WebMethodAttribute 工作,因为它使用 SOAP 调用。然而,this SO question 的有趣之处在于它声明 JSON 将被格式化为适当的 SOAP 格式。有点好:)

但是,以上确实让我感觉更强烈的是,您的 json 密钥需要匹配您的方法签名的命名才能使序列化工作

【讨论】:

  • 我的一个问题是我正在动态构建一个 json 数组!你能重新检查我的代码吗?
  • @test 我重新检查过,看起来一样吗?我看不到任何动态。
  • 抱歉现在才发!我希望我能找到错误:(
  • @test 那里有很多错误。您正在为一个人构建一个数组,而不是一个字符串。您的 createBoundary 方法似乎也从未被调用过。仅仅因为你把它放在 += 之间并不意味着它会在它们之间被调用。我会尝试按照您最初发布的方式进行基本调用,以确保您的网络方法正常工作。在那之后,如果你对 jquery 部分有问题,你真的应该把它作为一个单独的问题发布,因为它就是这样
  • @test 我可以告诉你,你可以动态构建一个 json 数组。我以前做过……不久前,但是一旦我把个人电脑放在我面前,我就可以看看一些旧代码。
【解决方案3】:

我不确定接收端,但您的数据未以可识别的格式传递。 jQuery.ajax()intelligent guess 转换为数据格式,但对您来说最快的转换是 JSON:

data: '{"xmlLoc":"x"}'

正确的 JSON 格式需要引号。

【讨论】:

  • 也许我不确定这一点,但是否必须在您展示给我的代码左侧键入“xmlLoc”?仍然出现错误,对服务器端的调用失败
  • 左边应该是post变量的key,右边应该是value。
猜你喜欢
  • 1970-01-01
  • 2014-09-07
  • 1970-01-01
  • 2015-02-10
  • 1970-01-01
  • 2018-10-19
  • 2017-05-02
  • 2019-01-01
  • 1970-01-01
相关资源
最近更新 更多