2014-02-18 31 views
0

我正在构建一个通过Ajax提交的表单。如果我们的数据库更新成功,控制器中的函数会返回数字ID,并且我想使用这些ID根据结果更改视图。用数值解析JSON jQuery PHP

我很难解析从控制器返回的ID。

foreach($update_pending as $product){ 
    $success_ids[] = $product['product_id']; 
} 

if(isset($success_ids)){ 
    echo json_encode($success_ids); 
}else{ 
    echo json_encode(array('error'=>'Error!')); 
} 

的ID返回这样的:他们从这里控制器返回[129818,129819,129820]

现在我想基于哪个ID的解析,这样我可以更改视图已提交。我提到了这个问题JQuery Parsing JSON array,但我仍然错过了一些东西。

当我提交我得到错误的形式是“无法读取空的特性‘长度’”

这里是jQuery的功能(编辑:我添加数据类型:“JSON”,在结果没有变化):

$(function() { 
    $('form').on('submit', function (event) { 
     var product = $(this).attr("data-id"); 

     event.preventDefault(); 

      $.ajax({ 
      type: 'POST', 
      url: 'category_typeahead', 
      data: $('form').serialize(), 
       dataType: 'json', 
      success: function (data) { 
       if(data.error == undefined){ 
       alert(data); 
       product_ids = $.parseJSON(data); 

       for (var i=0, len=product_ids.length; i < len; i++) { 
        $(product_ids[i]).hide(); 
       } 

       }else{ 
       if($('.error_true').length==0){ 
        $('#error').append('<div class="alert alert-error error_true">Error text</div>'); 
       } 
       $('#error').show(); 
       } 
      } 
      }); 

    }); 
    }); 
+0

后的console.log输出(product_ids)请 – Hackerman

+0

你好,首先请加入你的Ajax数据类型: 'JSON' 数据后: $('形式').serialize(), – Netzach

+0

OK,刚刚尝试过,但没有更改结果,console.log(product_ids)返回“null”。 console.log(data)返回如下所示的product_id:[129826,129827,129828] – Dan

回答

1

尝试用这个,乌尔VAR product_ids是没有必要的

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> 
<script type="text/javascript"> 
$(function() { 
    $('form').on('submit', function (event) { 
     var product = $(this).attr("data-id"); 

     event.preventDefault();// using this page stop being refreshing 

      $.ajax({ 
      type: 'POST', 
      url: 'category_typeahead', 
      data: $('form').serialize(), 
       dataType: 'json', 
      success: function (data) { 
       if(data.error == undefined){ 
       data.forEach(function(entry){ 
        $('#'+entry).hide(); 
        }); 

       }else{ 
       if($('.error_true').length==0){ 
        $('#error').append('<div class="alert alert-error error_true">Error text</div>'); 
       } 
       $('#error').show(); 
       } 
      } 
      }); 

    }); 
    }); 
</script> 
+0

谢谢!是的,您还注意到我错过了data.hide()变量旁边的标识符 – Dan