【问题标题】:How to call a JavaScript function from PHP if click and curl?如果单击并卷曲,如何从 PHP 调用 JavaScript 函数?
【发布时间】:2018-09-28 09:46:04
【问题描述】:

我有一个小项目,我尝试从域中获取数据并将这些信息放入输入字段中。

Curl 功能很好并且工作正常。但是,如果 jQuery 脚本不工作或无法填充输入字段。如果我使用 $url = "http://domain..."; ,则所有页面都在加载,但如果我使用带有按钮和发布表单的输入字段,则字段为空。 curl 正在工作并返回整个页面。

如何在加载 curl 脚本后使用相同的按钮加载脚本?

按钮:

<form action="" method="POST">
    <label for="name">URLinput</label>
    <input type="url" id="inf_endpoint" name="inf_endpoint" value="" />
    <button type="submit" name="mytest">Test This</button>
</form>

我尝试过的:

    <?php
if(isset($_POST['mytest'])){
    $url=$_POST['inf_endpoint'];
    $agent= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_VERBOSE, true);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    curl_setopt($ch, CURLOPT_URL, html_entity_decode($url));
    $data = curl_exec($ch);
    if($result === false){
        echo 'Curl error: ' . curl_error($ch);
    }else{
        echo 'All is good';
        ?>
        <script>
            jQuery.ajax({

              url: '<?php echo site_url('admin/matches/manage'); ?>',
              type: 'GET',
              success: function(res) {


                  var data = jQuery.parseHTML(res);  
                     jQuery(data).find('div.right').each(function(){
                     $('#date').val(jQuery(this).html()); 
                   });

                   var data = jQuery.parseHTML(res);  
                     jQuery(data).find('div.team a:first').each(function(){
                     $('#team1').val(jQuery(this).html()); 
                   });

                   var data = jQuery.parseHTML(res);  
                     jQuery(data).find('div.team a:nth-child(2)').each(function(){
                     $('#team2').val(jQuery(this).html()); 
                   });

                   var data = jQuery.parseHTML(res);  
                     jQuery(data).find('div.match_head .left a:first').each(function(){
                     $('#league').val(jQuery(this).html()); 
                   });

                   var data = jQuery.parseHTML(res);  
                     jQuery(data).find('div.score').each(function(){
                     $('#result').val(jQuery(this).html()); 
                   });

                   var data = jQuery.parseHTML(res);  
                     jQuery(data).find('div.team_logo a:first').each(function(){
                     $('#logo1').val(jQuery(this).html()); 
                   });

                   var data = jQuery.parseHTML(res);  
                     jQuery(data).find('div.oppo2 a:first').each(function(){
                     $('#logo2').val(jQuery(this).html()); 
                   });

                }
            });
        </script>
        <?php
    }
    curl_close($ch);
    echo $data;
} 
?>

但这适用于页面加载。但不是使用带有 click 的 if 语句

$url="https://thedomain";
$agent= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';

$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_VERBOSE, true);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_URL, html_entity_decode($url));
$data = curl_exec($ch);
if($result === false){
    echo 'Curl error: ' . curl_error($ch);
}else{
    echo 'All is good';
}
curl_close($ch);
echo $data;

jQuery.ajax({

      url: '<?php echo site_url('admin/matches/manage'); ?>',
      type: 'GET',
      success: function(res) {


          var data = jQuery.parseHTML(res);  
             jQuery(data).find('div.right').each(function(){
             $('#date').val(jQuery(this).html()); 
           });

           var data = jQuery.parseHTML(res);  
             jQuery(data).find('div.team a:first').each(function(){
             $('#team1').val(jQuery(this).html()); 
           });

           var data = jQuery.parseHTML(res);  
             jQuery(data).find('div.team a:nth-child(2)').each(function(){
             $('#team2').val(jQuery(this).html()); 
           });

           var data = jQuery.parseHTML(res);  
             jQuery(data).find('div.match_head .left a:first').each(function(){
             $('#league').val(jQuery(this).html()); 
           });

           var data = jQuery.parseHTML(res);  
             jQuery(data).find('div.score').each(function(){
             $('#result').val(jQuery(this).html()); 
           });

           var data = jQuery.parseHTML(res);  
             jQuery(data).find('div.team_logo a:first').each(function(){
             $('#logo1').val(jQuery(this).html()); 
           });

           var data = jQuery.parseHTML(res);  
             jQuery(data).find('div.oppo2 a:first').each(function(){
             $('#logo2').val(jQuery(this).html()); 
           });

        }
    });

没有点击功能>页面正在加载并填写字段。

【问题讨论】:

  • 尝试将php文件的路径添加到表单的action属性中
  • 你在哪里设置$result
  • .each(function() { $('#date') 在循环中访问 id'd 元素意味着您有多个具有相同 id 的元素......这是无效的,可能会导致问题。将您的 Ajax 调用放入 jQuery(document).ready() 函数中也可能值得 - 如果 JavaScript 运行时 DOM 尚未加载,它将失败。
  • 脚本已完全运行。但仅在具有完整路径 url 且没有点击功能的页面加载时。但我需要点击按钮后的查找功能。

标签: javascript php jquery ajax php-curl


【解决方案1】:

cURL 即使在您与服务器打交道时也存在安全风险,但让我尝试指出一些项目。有人可以挡在你和你的卷发之间,魔法就会发生。

我认为您的第一行没有正确检查

  <?php
if(isset($_POST['mytest'])){

改成

<?php
if(isset($_POST['Submit'])){

甚至更好

if($_SERVER['REQUEST_METHOD']=='POST'){

其次,看不到$result在哪里设置,改如下

if($result === false){

if(empty($data)){

我希望能解决缺失的问题

【讨论】:

    猜你喜欢
    • 2010-11-05
    • 2015-06-25
    • 1970-01-01
    • 2018-08-21
    • 2011-04-14
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多