从客户端向服务器端发送数据 - 无效的 JSON 原语:位置

本文关键字:无效 JSON 原语 位置 数据 客户端 服务器端 | 更新日期: 2023-09-27 18:31:08

目前,我有一个用户正在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: ....

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

如果我写 数据: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);
                }
            });
}

从客户端向服务器端发送数据 - 无效的 JSON 原语:位置

尝试添加数据类型:

dataType: "json",

此外,我认为您的数据应该是"s"而不是"xmlLoc",因为这就是您在操作中寻找的内容。

并尝试更改操作:

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

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

data: {"s":"x"}

即使在 JSON 的网站上,如果您希望字符串到字符串,也必须用引号格式化键/值对。不过,我建议将您的密钥命名为与您的参数相同。

根据 WebMethod 上的 MSDN,我最初认为这可能不适用于 WebMethodAttribute,因为它使用 SOAP 调用。但是,这个SO问题很有趣,因为它指出JSON将被格式化为适当的SOAP格式。有点不错的:)

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

我不确定接收端,但您的数据没有以可识别的格式传递。 jQuery.ajax()对数据格式进行智能猜测,但最快的转换是转换为 JSON:

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

引号对于正确的 JSON 格式是必需的。