从客户端向服务器端发送数据 - 无效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); 
       } 
      }); 
} 
+1

如果您将数据作为数据会发生什么: {“s:'x'”} – 2012-04-13 19:42:15

+0

你不能写,我得到一个意想不到的}} – test 2012-04-13 19:56:31

尝试增加数据类型:

dataType: "json", 

此外,我认为你的数据应该是“S”,而不是“xmlLoc”,因为这是你在找什么在你的行动。

,试着改变你的行动:

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

非常感谢你我现在就试试看! – test 2012-04-13 19:42:43

+0

我有语法错误我甚至无法解析HttpPost,我应该引用一个特定的程序集吗? – test 2012-04-13 19:46:20

我不知道在接收端,但你的数据不是可识别的格式进行传递。 jQuery.ajax()作出了intelligent guess数据格式,但对你最快的转换将是JSON:

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

引号是必要的适当的JSON格式。

+0

也许我对此不确定,但在您向我展示的代码左侧键入“xmlLoc”是否必须输入“xmlLoc”?仍然出现错误,调用服务器端失败 – test 2012-04-13 19:54:23

+1

左侧应包含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关键需要符合方法签名的命名为序列化工作

+0

我的问题之一是我正在动态构建一个json数组!你能重新检查我的代码吗? – test 2012-04-13 20:33:47

+0

@test我做了重新检查,它看起来一样吗?没有什么动态的,我可以看到。 – 2012-04-13 20:37:09

+0

对不起,现在就发布!我希望我能找到这个错误:( – test 2012-04-13 20:39:05