2017-06-13 78 views
0

试图在这里找到最佳解决方案...即使没有找到记录,也可以返回所有参数

如何返回服务器中没有数据的参数?

,试图为每个参数这里返回的数据发送多个参数到PHP脚本:

var cntnum = $('#cntnum').val().trim().toUpperCase().split("\n"); 

$.post('containerCheck.php', {cntnum:cntnum}, function(data) 
{ 
    var obj = JSON.parse(data); 
    $('#content').empty(); 
    var htmlToInsert = obj.map(function(item) 
    { 
    return '<tr><td>'+item.CONTAINER_NUMBER+'</td><td>'+item.LOCATION+'</td></tr>'; 
    }); 
    $('#content').html(htmlToInsert); 
}); 

的cntnum看起来就像这样:“NUM111”,“NUM222”,“NUM333”

在服务器上,containerCheck.php看起来是这样的:

<?PHP 
    $containers = $_POST['cntnum']; 

    $containersArray = preg_replace('/\n$/','',preg_replace('/^\n/','',preg_replace('/[\r\n]+/',"\n",$containers))); 

    $select = "SELECT CONTAINER_NUMBER, LOCATION FROM INVENTORY WHERE CONTAINER_NUMBER IN ('".implode("','",$containersArray)."')"; 
    $query = mysqli_query($dbc, $select) or die(mysqli_error()); 

    $out = array(); 
    while($row = $query->fetch_assoc()) 
    { 
    $out[] = $row; 
    } 
    echo json_encode($out); 
    mysqli_free_result($query); 
?> 

查询从JavaScript的获得通过,所有的3(​​或更多)的参数运行。

这是问题:如果其中一个参数没有返回任何数据,PHP将只返回其后面有数据的值。

因此,容器NUM111和NUM222可能有数据,但NUM333可能没有。即使3被发送到服务器,我上面使用的代码将只显示2条记录。

我需要能够显示所有的容器,而不管它后面没有数据。

我希望这是有道理的。

对解决方案开放。先谢谢你。

编辑

如果用户输入NUM111,NUM222,NUM333只有第2例表中的任何数据,我希望能够显示哪些有数据:

************************* 
* CONTAINER * LOCATION * 
************************* 
* NUM111 * NEW YORK * 
************************* 
* NUM222 * DELEWARE * 
************************* 
* NUM333 * NOT FOUND * 
************************* 

回答

1

把它分成两个部分:

  1. 准备将数据从服务器返回
  2. 渲染

    你会得到这样的:

    var results = []; 
        obj.forEach(function(item) { 
        results[item.CONTAINER_NUMBER] = item.LOCATION 
        }); 
    
        var html = cntnum.map(function(container) { 
        var num = item.CONTAINER_NUMBER 
        return '<tr><td>'+num+'</td><td>'+results[num]+'</td></tr>' 
        }); 
    
相关问题