【问题标题】:Pass nested object in jquery ajax在 jquery ajax 中传递嵌套对象
【发布时间】:2013-01-30 07:51:59
【问题描述】:

我想使用 jquery 在 ajax 中传递以下嵌套对象:

{
   "parent_param1" : [
      {
         "sub_param1" : "sub_val1",
         "sub_param2" : "sub_val2"
      },
      {
         "sub_param1" : "sub_val1",
         "sub_param2" : "sub_val2"
      },
      {
         "sub_param1" : "sub_val1",
         "sub_param2" : "sub_val2"
      }
   ],
   "parent_param2" : "par_val2",
   "parent_param3" : "par_val3"
}

我正在尝试像以下示例一样传递它:

var url = encodedURL;
var data = 'Above Object';

$.ajax({            
    type:'POST',
    url:url,
    dataType:'json',
    data:data,
        success:function(res){                      
              alert('success');                         
    },
    error:function(e){
      alert('error');   
    }                   
});

我收到运行时错误作为响应。我想确保这是使用 jQuery 在 AJAX 中传递嵌套对象的正确方法吗?

【问题讨论】:

  • 运行时错误是因为服务器端响应。不是因为你的剧本。你的脚本工作正常。尝试发布 URL 的响应,以便我们可以尝试干预它。
  • 是否可以在发送之前对其进行 JSON 编码?不要认为 jQuery 可以开箱即用。您可以将对象与数组一起传递,但不能将对象与对象一起传递。 (此处的示例 3:api.jquery.com/jQuery.get)参数应编码为 parent_param1[sub_param1]=sub_val1&parent_param1[sub_param2]=sub_val2&...,以便您可以创建一个生成类似字符串的函数。
  • 伙计们,我的方法通过 ajax jquery 传递嵌套对象是正确的吗?

标签: ajax jquery object


【解决方案1】:

现在您只是将一个对象传递给服务器,没有密钥。您需要将数据作为 JSON 字符串传递。

console.log(typeof data); //object
console.log(typeof JSON.stringify(data)); //string

为了在服务器端读取数据,您需要将数据作为带有键和值的对象字面量传递。像这样的:

data: { dto: JSON.stringify(data) },

在服务器端,您可以通过不同的方式访问对象,具体取决于语言。

PHP:

$dto = $_POST['dto'];

ASP.NET:

var dto = HttpContext.Current.Request.Form['dto'];

【讨论】:

  • 要在 PHP 中检索数据,您需要 json_decode 它。 $dto=json_decode($_POST['dto'], true); echo $dto['parent_param1']['sub_param1']; // outputs sub_val1
【解决方案2】:

我相信您遇到的问题是您试图发布对象本身。您需要将值作为字符串发布,然后在服务器端的对象上解码。这里有一个类似的问题:

jQuery $.post() JSON Object

JQuery post JSON object to a server

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 2018-11-12
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    相关资源
    最近更新 更多