2017-09-25 63 views
0

我们试图从javascript/ajax发送多个关联数组值到php,但我们在php文件中收到一个空的对象/数组。无法从javascript/ajax发送多个关联数组值到php

所以,你可以请帮忙从JavaScript到PHP的关联数组的值?

  1. 我们尝试了序列化数组并传递给一个php文件。

  2. 我们试图将数组转换为字符串,然后尝试将它传递给一个php文件。

请检查下面的代码:

// javscript 


function saveData(id) { 


    //var actionData = []; 
     var actionData = $('#' + id).closest('tr').find("[id^='action_']"); 
    var ownerData = $('#' + id).closest('tr').find("[id^='owner_']"); 
    //var type = $.type(actionData); 
    //alert(type); exit(); 

    /*alert(actionData[0]['action']);exit; 
    actionData['owner'] = $('#' + id).closest('tr').find("[id^='owner_']"); 
    actionData[2]['dueDate'] = $('#' + id).closest('tr').find("[id^='dueDate_']"); 
    actionData[3]['completedDate'] = $('#' + id).closest('tr').find("[id^='completedDate_']"); 

    //var myData = JSON.stringify(actionData['owner']); 

    //alert($('#' + id).closest('tr').find('#projId').val());*/ 
    var dataObject = []; 
    dataObject['projId'] = $('#' + id).closest('tr').find('#projId').val(); 

    //alert(myData); 
    //var newData1 = $.extend({}, actionData['owner']); 
    var newData = $.extend({}, dataObject); 

     /*dataObject = { 
      projId:     $('#' + id).closest('tr').find('#projId').val(), 
      riskNumber:    $('#' + id).closest('tr').children('td#riskNumber').text().slice(0,-4), 
      cause:     $('#' + id).closest('tr').find('#cause').val(), 
      effect:     $('#' + id).closest('tr').find('#effect').val(), 
      functionAffectedControl: $('#' + id).closest('tr').find('#functionAffectedControl :selected').val(), 
      categoryControl:   $('#' + id).closest('tr').find('#categoryControl :selected').val(), 
      impact:     $('#' + id).closest('tr').find('#impact :selected').val(), 
      severityControls:  $('#' + id).closest('tr').find('#severityControls').val(), 
      probability:    $('#' + id).closest('tr').find('#probability :selected').val(), 
      riskOwnerControl:  $('#' + id).closest('tr').find('#riskOwnerControl :selected').val(), 
      manageability:   $('#' + id).closest('tr').find('#manageability :selected').val(), 
      residualProbability:  $('#' + id).closest('tr').find('#residualProbability :selected').val(), 
      residualImpact:   $('#' + id).closest('tr').find('#residualImpact :selected').val(), 
      statusControl:   $('#' + id).closest('tr').find('#statusControl :selected').val() 
      //actions:     JSON.stringify(actionArray) 
      //owners:     $('#' + id).closest('tr').find("[id^='owner_']").val(), 
      //dueDates:    $('#' + id).closest('tr').find("[id^='dueDate_']"), 
      //CompletedDates:   $('#' + id).closest('tr').find("[id^='completedDate_']") 

     }*/ 


    $.ajax({ 
     type: "POST", 
     url:  "/apps/projmgmt/reports/SaveData.php", 
     data: { data: actionData, owner:ownerData}, // 
     dataType: 'json', 
     success: function(response) { 
      console.log(response); 
      alert('Data Saved Successfully'); 

     } 
    }); 

} 

// html 

<table class="table table-bordered table-striped tree-basic"> 
       <tbody> 
       {foreach from=$obj->getRiskActionList() name=risk item=risk} 
       <tr class="{$class}" data-count="2" id="{$k}"> 
        {$i = $i+1} 
        {$class='treegrid-'|cat:$i} 
        {$j = $i-1} 
        {$classNode='treegrid-parent-'|cat:$j} 
        <td style="font-weight: bold;"> 
         <div class="treegrid-container"> 
          <span class="treegrid-expander treegrid-expander-collapsed"></span> 
          {'ACTION'|gettext|escape}</div> 
        </td> 
        <td colspan="6" > 
         <input type="hidden" name="actionId[]" id="actionId_{$k}" value="{$risk->getId()|escape}" /> 
         <div class="treegrid-container"> 
          <span class="treegrid-expander"></span> 
          <textarea rows="2" cols="100" id="action_{$k}" name="mitigationAction[]" maxlength="256">{$risk->getMitigationAction()|escape}</textarea></div> 
        </td> 
       </tr> 

       <tr class="{$class} {$classNode}"> 
        {$i = $i+1} 
        {$class='treegrid-'|cat:$i} 
        <td style="font-weight: bold;" > 
         <div class="treegrid-container"> 
          <span class="treegrid-expander"></span>{'OWNER_NAME'|gettext|escape}</div></td> 
        <td> 
         <input type="text" name="actionOwner[]" size="50" id="owner_{$k}" value="{$risk->getOwnerName()|escape}" maxlength="80"/> 
        </td> 
        <td style="font-weight: bold; text-align: center;" >{'DUE_DATE'|gettext|escape}</td> 
        <td> 
         <input type="hidden" class="riskPopupCalendar" id="actionDueDate_{$i}" name="actionDueDate[]" value="{$smarty.request.actionDueDate[$i]|escape}"> 
         <div size="10" name="actionDueDateText[]" id="dueDate_{$k}">{if null != {$risk->getDueDate()|escape}}{$risk->getDueDate()->format('d/m/Y')|escape}{/if}</div> 
         <a href="#"><img src="/images/calendar.gif" id="actionDueDateDatepicker_{$i}" style="width:16px;height:16px;"></a> 
         <a href="#"><img src="/images/calendar_delete.gif" class="riskPopupCalendarDelete" style="width:16px;height:16px;" 
                 data-input="actionDueDate_{$i}" data-text="actionDueDateText_{$i}" id="actionDueDateDelete_{$i}"></a> 
        </td> 
        <td style="font-weight: bold; text-align: center;" >{'COMPLETED_DATE'|gettext|escape}</td> 
        <td> 
         <input type="hidden" class="riskPopupCalendar" id="actionCompletedDate_{$i}" name="actionCompletedDate[]" value="{$smarty.request.actionCompletedDate[$i]|escape}"> 
         <div size="10" name="actionCompletedDateText[]" id="completedDate_{$k}>{if null != {$risk->getCompletedDate()|escape}}{$risk->getCompletedDate()->format('d/m/Y')|escape}{/if}</div> 
         <a href="#"><img src="/images/calendar.gif" id="actionCompletedDateDatepicker_{$i}" style="width:16px;height:16px;"></a> 
         <a href="#"><img src="/images/calendar_delete.gif" class="riskPopupCalendarDelete" style="width:16px;height:16px;" 
                 data-input="actionCompletedDate_{$i}" data-text="actionCompletedDateText_{$i}" id="actionCompletedDateDelete_{$i}"></a> 
        </td> 
       </tr> 

       <tr class="{$class} {$classNode}"> 
        <div class="treegrid-container"> 
         <span class="treegrid-expander"></span> 
         <td data-column="name"><img src="/images/blank.gif" class="ib_left"><input type="button" id="{$k|escape}" name="removeActionButton" value="{'REMOVE_ACTION'|gettext|escape}" class="removeActionButton ib"><img src="/images/blank.gif" class="ib_right"></td></div> 
       </tr> 
        {$i = $i+1} 
        {$k = $k+1} 
        {$class='treegrid-'|cat:$i} 
       {/foreach} 
       <tr> 
        <td></td><td></td><td></td><td></td><td></td> 
        <td align="right"><img src="/images/blank.gif" class="ib_left"><input type="button" onclick="updateData('{$row}','{$k}');" data-number="{$i}" value="{'ADD_ACTION'|gettext|escape}" class="addActionButton ib"><img src="/images/blank.gif" class="ib_right"></td> 
       </tr> 
       </tbody> 
      </table> 

回答

0

首先确保你的数据是什么,你认为它是:

var data = JSON.stringify({ data: actionData, owner:ownerData}) 
console.log(data) 

如果然后在Ajax调用发送的数据对象。然后在PHP方面,我会确认收到的数据与发送的数据相匹配。然后解析所述数据。这应该有助于缩小范围并解决您的问题。