【问题标题】:Javascript array into jQuery .post AJAX call将 Javascript 数组转换为 jQuery .post AJAX 调用
【发布时间】:2012-01-07 21:51:59
【问题描述】:

我有一个如下所示的 JAVASCRIPT 数组:

postarray['min_price'] = 120000;
postarray['max_price'] = 150000;

我正在尝试通过 jQuery .post 函数将其传递给 AJAX 调用,以便 .PHP 文件以这种格式获取它:

$_REQUEST['query']['min_price'] = 120000;
$_REQUEST['query']['max_price'] = 150000;

到目前为止我已经尝试过:

$.post("ajax_findproperties.php", {query: postarray},
        function(data){
            // processing function with JSON result
        }
    ,'json');

但我没有运气。我什至尝试将 var postarray 更改为查询,然后尝试query.serialize() 代替括号中的变量块,但也没有运气。

当我在 Firebug 上检查我的状态时,AJAX 调用绝对没有设置任何 POST 变量 - 完全空白。

【问题讨论】:

  • 有可能,但为什么不只是 query_min_price、query_max_price?
  • 因为如果所有这些都统一在一个数组中,那么在我的 PHP 方面会更容易。原来的表格里面有 name="query[min_price]" ......尽量不要改变太多。
  • 还有一个奇怪的提示:当我提醒 postarray.length 时,它返回 0。但是当我执行 for(x in postarray) 循环并提醒 x 和 postarray[x] 时,变量和数组钥匙出来就好了。那是怎么回事?

标签: javascript jquery arrays variables


【解决方案1】:

javascript 数组不是数组,它是一个对象。之前定义:

var postarray = {};
postarray['min_price'] = 120000;
postarray['max_price'] = 150000;

或替换为:

var postarray = {
    min_price: 120000,
    max_price: 150000
};

现在 JSON.stringify 可以工作了:

alert(JSON.stringify(postarray));

另见example

但是这个对象也应该在没有 JSON.stringify() 的情况下发送:

$.post("ajax_findproperties.php", {query: postarray}, ... );

【讨论】:

  • 迄今为止最好的答案!我正在尝试,到目前为止它显示出积极的迹象......只需再进行一些调整以确保一切正确......
【解决方案2】:

您是否尝试过使用JSON.stringify(); 转换它,然后在PHP 脚本中执行json_decode(...);

【讨论】:

  • 我试过 JSON.stringify(postarray) 并且只返回 [],没有任何字符串或变量。
  • 您可能应该将其更改为适当的对象而不是数组:query.min_price = 120000;query.max_price = 150000;。如果您坚持将其保留为数组格式而不是对象格式,则必须通过在变量名称中添加方括号来告诉 jQuery:{'query[]': postarray},尽管我不确定它是否会正确处理非整数索引。
  • 在这种情况下,如何从表单数据中生成 query.min_price 部分?它们不是预设的。它们由正在使用的输入字段的名称确定,并且或多或少可以动态添加。 query.min_price、query.max_price、query.other_fieldname、query.more_fieldnames 等。如何根据 字段属性循环?
  • 您可以使用var inputs = document.getElementById('your-form-id').getElementsByTagName('input');,然后使用此检查执行for循环:if (inputs[i].name && /^query\[/.test(inputs[i].name)) { ... }
  • 是的,我知道如何进行循环,但是如果我使用像 query.[name] 这样的对象样式,我该如何分配它?假设 fieldname = min_price 已设置,我想自动将其转换为 query.min_price.. 我是否只需执行 query.'fieldname' 并成为 query.min_price 对象?
【解决方案3】:

试试这个解决方案:将[] 添加到您的query 密钥

$.post("ajax_findproperties.php", { 'query[]': postarray },
    function(data) { },
    'json');

来源:http://api.jquery.com/jQuery.post/#example-2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多