jQuery $ .. post -json-正确发送/接收输入数据的正确方法(仅在客户端) - 两个问题任务

StackOverflow https://stackoverflow.com/questions/3546661

  •  30-09-2019
  •  | 
  •  

让我们想象我们有类似的东西:

$.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.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top