jQuery $ .. post -json-正确发送/接收输入数据的正确方法(仅在客户端) - 两个问题任务
题
让我们想象我们有类似的东西:
$.post('somescript.php', 'WHAT CAN WE PUT HERE?',
function(replyData) {
1)默认情况下 第三个论点 $ .post方法,读取XMLResponse响应是否正确?那么,为什么我们需要该论点“ ReplyData”?我们可能有什么原因来提出这一论点?
2) 第二个参数 接受将要发送的数据。行。我想使用JSON,但是,我不确定是否应该在第二个参数上使用JSON格式 或者 针对包含该数据的输入表单字段?
附加说明:数据将来自输入字段,我需要通过$ .post ajax请求将其发送到服务器。我打算使用JSON ENCODE和JSON DECODE PHP函数。
预先感谢,mem
解决方案
这 replyData
参数包含服务器返回的响应的正文,然后您可以操作以显示在页面上,验证服务器端是否成功处理了数据,等等。您不必使用它(例如,如果您不要返回任何数据)。
您正在提供的数据(以JSON格式)仍需要以查询字符串的形式为 param=value
. 。该值还需要正确编码,使用 encodeuricomponent():
$.post('somescript.php', 'data='+encodeURIComponent(myJSON),
function(replyData) {
然后,您可以通过PHP脚本中的JSON访问JSON $ _ post 超级全球:
$data = json_decode($_POST['data']);
但是,对于简单的输入字段而言,JSON将有点过分杀伤。使用JSON代替名称/值对作为表单字段并不常见。
其他提示
1)第三个参数是回调函数。如果您提供匿名函数(如示例中),则需要命名参数以访问它。如果您返回JSON结构,则可以访问ReplyData.foo等。
2)您可以从表单中提取值并构建JSON结构。
var data = {};
data.threadid = $(form).find('input[name=threadid]').val();
data.commentid = $(form).find('input[name=commentid]').val();
$.post('somescript.php', data, function(replyData) { alert(replyData.foo); } );
我从drupal偷走了此功能,并修复了阵列上的尾随逗号,并且对象导致zend_json_server抛出异常。
var toJson = function(v) {
// typeof null == object so we check beforehand;
if ( v == null ){
return null;
}
switch (typeof v) {
case 'boolean':
return v == true ? 'TRUE' : 'FALSE';
case 'number':
return v;
case 'string':
return '"'+ v +'"';
case 'object':
if ( !(v instanceof Array) ){
var output = "{";
for(i in v) {
output = output + '"'+i+'"' + ":" + toJson(v[i]) + ",";
}
output = output.substr(0,output.length-1) + "}"; // Fix the trailing comma error wich isn't officialy allowed.
}else{
var output = "[";
for(i in v) {
output = output + toJson(v[i]) + ",";
}
output = output.substr(0,output.length-1) + "]"; // Fix the trailing comma error wich isn't officialy allowed.
}
return output;
default:
return null;
}
}
现在只能将其喂养您的数据:
var myJsonString = toJson($('myform').serialize());
Wich将返回从您的变量递归生成的JSON字符串。适用于我的大多数应用程序。
总的来说,我同意 安迪E。 如果你看着 细绳 他们应该看起来应该发布的数据
'data='+encodeURIComponent(myJSON)
我只想清楚,在实践中,一个使用$ .post的第二个参数主要不是字符串:
$.post('somescript.php', 'data='+encodeURIComponent(myJSON), ... );
但是作为对象:
$.post('somescript.php', {data: myJSON}, ...);
然后打电话 encodeURIComponent
功能并构造字符串 'data='+encodeURIComponent(myJSON)
关于 jquery.param() 内部。要了解的要重要得多 myJSON
您必须通过从一个包含要发布的数据的对象的一些JSON编码函数来生成此JSON字符串。因此,代码在实践中看起来会像以下
$.post('somescript.php', { data: JSON.stringify(myObject) }, ...);
在哪里 JSON.stringify
是JSON2.JS的JavaScript函数,您可以免费下载 http://www.json.org/js.html.