2014-04-04 180 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() 
    } 
})