【问题标题】:PHP cannot pass two parameter to another php using ajaxPHP无法使用ajax将两个参数传递给另一个php
【发布时间】:2016-07-12 10:47:26
【问题描述】:

我需要调用 php 并从另一台服务器获取数据,我正在使用 proxy.php 从 ajax 调用。

proxy.php

<?
header('Content-type: application/json');
$url=$_GET['url'];
$json=file_get_contents($url);
echo $json;
?>

我的代码看起来

    function scanFunction(){

        var url="http://address/scan.php?user=user1&video=video1";
         console.log(url);

        url = 'proxy.php?url='+url;

        $.ajax({

        url: url,
        type: "POST",
        data: {

        },
        dataType: "JSON",
        success: function (jsonStr) {
           if(jsonStr.length>0){
            var obj = jsonStr;
             console.log(obj);
            }
           else{
              console.log(" error...");
           }

       }

    });

}

当我使用传递给 proxy.php 的 url 的一个参数时,这段代码可以正常工作,而第二个参数丢失了

那是

echo $url; 在 proxy.php 内打印 http://address/scan.php?user=user1

事件我传递了两个参数,例如, proxy.php?url="http://address/scan.php?user=user1&amp;video=video1"

这是 proxy.php 中缺少的第二个参数视频,所以我没有得到预期的结果。

【问题讨论】:

  • 您认为.ajax 调用的data: 属性可能用于什么
  • 快速解释:一旦你在地址扫描 url 中有第一个&amp;,它将被视为get 的第二个参数。您必须找到一种对其进行编码的方法,然后将其设置为'proxy.php?url='+encoded_url

标签: php ajax proxy


【解决方案1】:

GET['url'] 变量中的 GET 变量可能存在问题。

当您发送到proxy.php 时尝试对您的网址进行编码以避免此类问题。

var url = encodeURIComponent("http://address/scan.php?user=user1&video=video1");
url = 'proxy.php?url='+url;

然后在 PHP 端你需要解码它。

$url=$_GET['url'];
if (is_string($url)) {
    $url = urldecode($url);
}

【讨论】:

    【解决方案2】:

    proxy.php 无法知道哪些参数适用于它,哪些参数适用于scan.php。例如,当您调用 url 时:

    proxy.php?url=http://address/scan.php?user=user1&video=video1
    

    您的代理脚本认为查询参数是:

    url:"http://address/scan.php?user=user1"
    video:"video1"
    

    但您的意图是让url 之后的所有内容都成为一个参数。更好的方法是使用POST 参数而不是URL 查询参数。

    $.ajax({
        url: url,
        type: "POST",
        data: {
            resource_url: "http://address/scan.php?user=user1&video=video1"
        },
        ....
    });
    

    现在,在 proxy.php 中:

    <?php
        header('Content-type: application/json');
        $url=$_POST['resource_url'];
        $json=file_get_contents($url);
        echo $json;
    ?>
    

    【讨论】:

      【解决方案3】:

      使用 ajax 调用的 data: 属性传递任意数量的参数

      function scanFunction(){
      
          $.ajax({
              url: 'proxy.php',
              type: 'POST',
              data: { 
                      url: 'http://address/scan.php',
                      user: 'user1',
                      video: 'video1'
                    },
              dataType: "JSON",
      
              success: function (jsonStr) {
                 if(jsonStr.length>0){
                     var obj = jsonStr;
                     console.log(obj);
                 } else {
                     console.log(" error...");
                 }
             }
          });
      }
      

      然后从 php 脚本中的这些参数构建你想要的任何东西

      哦,你在 javascript 中使用了 type: 'POST',所以你应该在 PHP 脚本中使用 $_POST 数组。

      proxy.php

      <?php
      
      $url = $_POST['url'] . '?user=' . $_POST['user'] . '&video=' . $_POST['video'];
      
      $json=file_get_contents($url);
      
      header('Content-type: application/json');
      echo $json;
      ?>
      

      【讨论】:

      • 其实我需要通用的proxy.php来使用,我必须从很多地方用不同的参数调用它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-06
      • 1970-01-01
      • 2015-02-12
      • 1970-01-01
      • 2018-06-11
      相关资源
      最近更新 更多