【问题标题】:Populating an array through jquery AJAX in php在php中通过jquery AJAX填充数组
【发布时间】:2016-12-29 21:17:31
【问题描述】:

我在 compare.php 中有一个函数,它接受一个参数 $data 并使用该数据从 Web 中查找某些内容并提取数据并返回一个数组。

function populateTableA($data);

所以为了填充数组我这样做

$arrayTableA = populateTableA($name);

现在这个数组用于迭代表..

<table id="tableA">
<input type="text" name="search"/><input type="submit"/>
<?php foreach($arrayTableA as $row) { ?>
  <tr>
     <td><?php echo $row['name']?></td>
     <td><?php echo $row['place']?></td>
  </tr>
</table>

现在我要做的是在 input 上输入一些数据,然后通过 jquery ajax

function populateTableA($data); 

应该被调用并且 $array 应该被重新填充新的内容,然后在 tableA 上填充而不刷新页面。

我写了这个 jquery 但没有结果。

$(document).on('submit',function(e) {
e.preventDefault();  // Add it here 
 $.ajax({ url: 'compare.php',
 var name = ('search').val();
     data: {action: 'populateTableA(name)'},
     type: 'post',
     success: function(output) {
                  $array = output;
              }
       });
});

我一直在做网页抓取,上面是为了了解如何实施该策略......我的 php 文件中的原始函数如下

function homeshoppingExtractor($homeshoppingSearch)
{
$homeshoppinghtml = file_get_contents('https://homeshopping.pk/search.php?category%5B%5D=&search_query='.$homeshoppingSearch);
$homeshoppingDoc = new DOMDocument();
libxml_use_internal_errors(TRUE); 
if(!empty($homeshoppinghtml)){
$homeshoppingDoc->loadHTML($homeshoppinghtml);
libxml_clear_errors(); 
$homeshoppingXPath = new DOMXPath($homeshoppingDoc);
//HomeShopping
$hsrow = $homeshoppingXPath->query('//a[@class=""]');
$hsrow2 = $homeshoppingXPath->query('//a[@class="price"]');
$hsrow3 = $homeshoppingXPath->query('(//a[@class="price"])//@href');
$hsrow4 = $homeshoppingXPath->query('(//img[@class="img-responsive imgcent"])//@src');

//HomeShopping
if($hsrow->length > 0){
    $rowarray = array();
    foreach($hsrow as $row){
        $rowarray[]= $row->nodeValue;
       // echo $row->nodeValue . "<br/>";
    }
}
if($hsrow2->length > 0){
    $row2array = array();
    foreach($hsrow2 as $row2){
        $row2array[]=$row2->nodeValue;
       // echo $row2->nodeValue . "<br/>";
    }
}
if($hsrow3->length > 0){
    $row3array = array();
    foreach($hsrow3 as $row3){
        $row3array[]=$row3->nodeValue;
        //echo $row3->nodeValue . "<br/>";
    }
}
if($hsrow4->length > 0){
    $row4array = array();
    foreach($hsrow4 as $row4){
        $row4array[]=$row4->nodeValue;
        //echo $row3->nodeValue . "<br/>";
    }
}
$hschecker = count($rowarray);
if($hschecker != 0) {
    $homeshopping = array();
    for($i=0; $i < count($rowarray); $i++){
        $homeshopping[$i] = [
        'name'=>$rowarray[$i],
        'price'=>$row2array[$i],
        'link'=>$row3array[$i],
        'image'=>$row4array[$i]
        ];
    }
}
else{
    echo "no result found at homeshopping";
}
}
return $homeshopping;
}

【问题讨论】:

  • 把你的php文件代码,你试过console.log(output)会不会显示任何数据
  • 检查更新的问题
  • Php 是服务器端语言,javascript 是客户端,从执行 javascript 的那一刻起,Php 就已经执行了。您不能在 javascript 中更新 php 变量。
  • 函数populateTableA是php还是javascript?
  • 您是否尝试过使用 echo exit 为 php 文件调试 ajax 调用?

标签: javascript php jquery arrays ajax


【解决方案1】:

如 cmets 中所述,PHP 是一种服务器端语言,因此您将无法从 javascript 运行 PHP 函数。

但是,如果您想更新 tableA(不刷新整个页面),您可以创建一个新的 PHP 页面,该页面只会创建 tableA 而不会创建其他内容。然后你可以使用这个 ajax 调用(或类似的东西)-

$(document).on('submit','#formReviews',function(e) {
    e.preventDefault();
    $.ajax({ 
        url: 'getTableA.php', //or whatever you choose to call your new page
        data: {
            name: $('search').val()
        },
        type: 'post',
        success: function(output) {
            $('#tableA').replaceWith(output); //replace "tableA" with the id  of the table
        },
        error: function() {
            //report that an error occurred
        }
    });
});

【讨论】:

  • 所以基本上这就是计划!我将创建一个新的 php 文件,它只会创建表,然后通过 ajax 调用它并将其 html 放入 div
  • 是的,这就是我的建议。
【解决方案2】:

您好,您这样做的方式不对。您必须更改对 html 表的响应并覆盖旧表。

 success: function(output) {
              $("#tableA").html(output);
          }
   });

在您的 ajax 页面中使用您的结果数组创建一个表

【讨论】:

  • 请看他的 compare.php 有几个改变需要使用 ajax
【解决方案3】:

朋友,你走错方向了。

首先,您的 JS 代码中存在一些语法错误。

所以使用JavaScript Debugging 找出你出错的地方。

之后Basic PHP with AJAX 获取 ajax 和 PHP 如何协同工作的参考

然后在你的代码中

  1. 创建一个 PHP 文件,您必须在其中打印要刷新的表格部分。
  2. 编写一个 AJAX,它将访问该 PHP 文件并从服务器获取表结构。所以所有的数据处理都将由服务器完成 AJAX 仅用于请求数据并从服务器获取响应。
  3. 使用 JS 将结果放入 html 代码中。

希望这会有所帮助

【讨论】:

    猜你喜欢
    • 2017-03-18
    • 2011-08-14
    • 2015-08-16
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多