2014-04-04 136 views
0

我试图通过ajax后(3文本字符串和1多维文本字符串数组)传递4段数据。当我发出ajax请求时,我只能够检索3个文本字符串,而不是数组。这是我传给“page_content.php”,在那里我拉form_arr参数(无功能,里面的AJAX请求......jQuery传递数组通过ajax后

function page_load(page_num, prev_page, next_page, form_arr) 
{ 
    $.ajax({ 
     type: 'post', 
     cache: false, 
     url: 'page_content.php', 
     data: {'page_num' : page_num, 
       'prev_page': prev_page, 
       'next_page': next_page, 
       'form_arr' : form_arr 
       } 
    }).done(function(data){ 
     $('#main_content').empty().html(data); 
    }); 
} 

当执行功能,所有数据(应该是)成功)...

<?php 

    //test parameter pull 
    echo '<pre>'; 
    var_dump($_POST); 
    echo '</pre>'; 

?> 

我看到的是这样的......

array(3) { 
    ["page_num"]=> 
    string(5) "start" 
    ["prev_page"]=> 
    string(1) "0" 
    ["next_page"]=> 
    string(1) "1" 
} 

我已经证实,该阵列被正确地创建并成功通过了 “Page_Load中” 功能(I”已经能够循环通过gh函数内的数组,并提醒每个字符串)。如果我将“form_arr”变量更改为字符串,而不是数组,而不是函数之外的数组,我可以像其他3个参数一样将其拉出。

有什么,我失踪了吗?


这是我整个的js文件...

$(document).ready(function() 
{ 

    //initial page load 
    var page_num = 'start'; 
    var prev_page = 0; 
    var next_page = 1; 
    var form_arr = new Array(); 

    var form_element = new Array(); 

    form_element['name'] = 'TAG NAME'; 
    form_element['value'] = 'N/A'; 

    form_arr.push(form_element); 

    page_load(page_num, prev_page, next_page, form_arr); 

    //START button click event handler 
    $('#main_content').delegate('a.button', 'click', function(e) 
    { 
     var btn_id = $(this).attr('href'); 

     if(!$(this).hasClass('disabled')){ 
      //call button_click function 
      button_click($(this), btn_id); 
     } 
     e.preventDefault(); 
    }); 
    //END button click event handler 

    $('#main_content').delegate('form', 'submit', function(e){ 
     e.preventDefault(); 
    }); 

    //START "other" option select from dropdown 
    $('#main_content').delegate('select.dropdown', 'change', function(e) 
    { 
     var selected = $(this).find("option:selected"); 
     var target = $(this).children('option.trigger').attr('class').replace('trigger ', ''); 

     if(selected.hasClass('trigger')) 
     { 
      $('.hidden_view.' + target).show(); 
     }else 
     { 
      $('.hidden_view.' + target).hide(); 
     } 

    }); 
    //END "other" option select from dropdown 

    /*** FUNCTIONS ***/ 

    //START button_click function 
    function button_click(btn_obj, btn_id) 
    { 

     //set next and previous page values 
     var page_num = parseInt(btn_id); 
     var prev_page = page_num - 1; 
     var next_page = page_num + 1; 

     /* START LOOP THROUGH FORM AND PULLING VALUES */ 
     var form = btn_obj.parent(); 

     var form_arr = form_element_loop(form); 

     page_load(page_num, prev_page, next_page, form_arr); 
    } 
    //END button_click function 

    //START page_load function 
    function page_load(page_num, prev_page, next_page, form_arr) 
    { 

     var ajaxData = JSON.stringify(form_arr); 

     $.ajax({ 
      type: 'post', 
      cache: false, 
      url: 'page_content.php', 
      data: {'page_num' : page_num, 
        'prev_page': prev_page, 
        'next_page': next_page, 
        'form_arr' : ajaxData} 
     }).done(function(data){ 
      $('#main_content').empty().html(data); 
     }); 

    } 
    //END page_load function 

    //START form_element_loop function 
    function form_element_loop(form) 
    { 
     var form_arr = new Array(); 
     var x = 0; 

     $(form).children().each(function() 
     { 
      var element_tag = $(this).prop('tagName').toLowerCase(); 

      if(element_tag == 'section' || element_tag == 'article' || element_tag == 'div') 
      { 
       if($(this).is(':visible')) 
       { 
        $(this).children().each(function(){ 
         var element_tag = $(this).prop('tagName').toLowerCase(); 
         var form_element = form_element_switch($(this)); 
        }); 
       } 
      }else 
      { 
       var form_element = form_element_switch($(this)); 
      } 

      if(form_element.length > 0) 
      { 
       form_arr[x] = form_element; 
      } 

       x++; 
     }); 
     return form_arr; 
    } 
    //END form_element_loop function 

    function form_element_switch(form_obj, form_tag) 
    { 
     var form_element = new Array(); 

     switch(form_obj.prop('tagName').toLowerCase()) 
     { 
      case 'a': 
       break; 

      case 'label': 
       break; 

      case 'input': 
       form_element['name'] = form_obj.attr('name'); 
       form_element['value'] = form_obj.val(); 
       break; 

      case 'select': 
       form_element['name'] = form_obj.attr('name'); 
       form_element['value'] = form_obj.find(':selected').text(); 
       break; 
      } 

     return form_element; 
    } 

}); 
+0

什么是数组格式?显示示例 – brunozrk

+0

检查浏览器控制台。 – HBK

+0

我已经包含了我的完整JS文件(附在我的最初问题下面)。我也发现了这些问题(和解决方案)。我将一系列关联数组推到一个数字数组,然后尝试将其串化(这不起作用,因为该方法忽略关联数组)。感谢大家的帮助。 – rdrewniak

回答

1

您不能发送的JavaScript概念PHP代码。实际上,一般来说,您只能从客户端向服务器发送字符串。

最聪明的办法就是对其进行编码在JSON:

function page_load(page_num, prev_page, next_page, form_arr) 
{ 
    $.ajax({ 
     type: 'post', 
     cache: false, 
     url: 'page_content.php', 
     data: {'page_num' : page_num, 
       'prev_page': prev_page, 
       'next_page': next_page, 
       'form_arr' : JSON.stringify(form_arr) 
       } 
    }).done(function(data){ 
     $('#main_content').empty().html(data); 
    }); 
} 

然后在PHP它解码成一个PHP数组@

$form_arr = json_decode($_POST['form_arr'],true); 
0

随着你给的有限信息,我所能做的最好是说你不能通过Ajax发送的数组。在过去,我通过调用JavaScript方法join()解决了这个问题,该方法将数组转换为以逗号分隔的字符串。在后端,我会把这个逗号分隔的字符串变成一个数组。因此,举例来说,如果我想发送此阵:

var arr = ["joe,"sam","jane"]; 

我会做这在我的AJAX功能:

$.ajax({ 
    data:{ 
     arr : arr.join() 
    } 
})