【发布时间】:2012-10-22 22:12:49
【问题描述】:
我正在尝试发布一些 JSON,我需要在其中包含输入字段中的一些值。我有两个输入字段,分别是用户名和密码。
data = JSON.stringify({
"jsonrpc": "2.0",
"method": "POST",
"params": {
"params": {"username": $('#username').val(), "password": $('#password').val()}
}
});
当我对值进行硬编码时,我可以很好地发送它,问题是它不会从输入字段发送值。我做错了什么?
我是这样发送的:
$.ajax({
url:url,
type:"POST",
crossDomain: true,
dataType: "json",
data : data,
headers: {
'content-type': "application/json; charset=utf-8"
},
success: function(data){
$("#result").append('<p>Token: ' + data.result.token + '</p>');
$("#result").append('<p>Name: ' + data.result.Customer.Name.value + '</p>');
$("#result").append('<p>ID: ' + data.result.Customer.ID + '</p>');
},
error: function(data, status, xhr) {
alert("Error");
}
});
我尝试简化事情,所以我在单击按钮时将值添加到div。效果很好:
$("#login").click(function() {
$('#test').append($('#username').val());
});
回答:正如大卫在 cmets 中提到的,这是因为我在函数之外声明了数据变量。
【问题讨论】:
-
"params": { "params": ... } }似乎不合逻辑 -
如果在您对值进行硬编码时代码工作正常,则说明您访问值的方式有问题。
console.log(data)是什么样的?字段存在吗?data的声明是否在字段中有值时被评估? -
是的,如果我只是将值返回到屏幕,它们就可以正常工作。我开始思考 stringify 是否不允许动态数据?
-
stringify将生成您传递给它的任何对象的字符串表示形式,无论该对象是如何构造的。如果您可以传递完全相同的对象。因此,如果硬编码值有效,那么您访问值的方式就会出现问题。console.log(data)是什么样的?字段存在吗?当字段中有值时,是否正在评估数据声明? 将值返回到屏幕是什么意思? -
var data = JSON.stringify(x)将创建对象x的字符串表示,因为它是在评估该行代码时。data只是一个字符串,没什么神奇的。例如,如果这是在页面加载中完成的,并且您的<input id="username" />在页面加载时为空,那么x中该属性的值将是一个空字符串,并且生成的data字符串将反映这一点。如果您稍后在输入字段中输入一个值,这不会神奇地改变您的data字符串变量的内容。