PHP无法使用ajax将两个参数传递给另一个php

时间:2016-07-12 10:47:26

标签: php ajax proxy

我需要调用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时,这个代码工作正常,其中第二个参数缺失

那是

proxy.php print中的

echo $url; http://address/scan.php?user=user1

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

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

3 个答案:

答案 0 :(得分:2)

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

在将您的网址发送至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);
}

答案 1 :(得分:1)

使用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;
?>

答案 2 :(得分:1)

// getting all of the post data $files = Input::file('images'); // Making counting of uploaded images $file_count = count($files); // start count how many uploaded $uploadcount = 0; foreach($files as $file) { $rules = array('file' => 'required'); //'required|mimes:png,gif,jpeg,txt,pdf,doc' $validator = Validator::make(array('file'=> $file), $rules); if($validator->passes()){ $destinationPath = 'uploads'; $filename = $file->getClientOriginalName(); $upload_success = $file->move($destinationPath, $filename); $uploadcount ++; } } if($uploadcount == $file_count){ //uploaded successfully } else { //error occurred } 无法知道哪些参数适用于它,哪些参数适用于proxy.php。例如,当你调用url:

scan.php

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

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

但你的意图是将url:"http://address/scan.php?user=user1" video:"video1" 之后的所有内容作为一个参数。更好的方法是使用url参数而不是URL查询参数。

POST

现在,在 proxy.php

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