从客户端向服务器端发送数据 - 无效JSON PRIMITIVE:位置
目前,我有一个用户在ajax bing地图上创建了很多点。当用户按下“提交”按钮,我想获得存储在map.entities的所有位置,我建立一个字符串的XML格式,我想将它保存在我的DB:从客户端向服务器端发送数据 - 无效JSON PRIMITIVE:位置
<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);
}
});
}
我不知道在接收端,但你的数据不是可识别的格式进行传递。 jQuery.ajax()
作出了intelligent guess数据格式,但对你最快的转换将是JSON:
data: '{"xmlLoc":"x"}'
引号是必要的适当的JSON格式。
也许我对此不确定,但在您向我展示的代码左侧键入“xmlLoc”是否必须输入“xmlLoc”?仍然出现错误,调用服务器端失败 – test 2012-04-13 19:54:23
左侧应包含post变量的键,右侧应包含该值。 – ramblinjan 2012-04-13 20:40:12
试着改变你的代码如下:
data: {"s":"x"}
Even on JSON's site,你必须用引号,如果你想串来串格式化你的键/值对。尽管如此,我建议将您的密钥命名为与您的参数相同。
根据the MSDN on WebMethod我最初认为这可能无法通过WebMethodAttribute工作,因为它消耗了SOAP调用。但是,this SO question的有趣之处在于它声明JSON将格式化为适当的SOAP格式。挺有意思:)
然而,上面确实让我觉得更强大,你的JSON关键需要符合方法签名的命名为序列化工作
如果您将数据作为数据会发生什么: {“s:'x'”} – 2012-04-13 19:42:15
你不能写,我得到一个意想不到的}} – test 2012-04-13 19:56:31