Ajax获取请求发送到不完整的URL

时间:2014-08-19 06:38:20

标签: jquery ajax json wordpress jsonp

因为我还没理解,我可以在firebug控制台中看到我的(第一次)ajax请求被发送到一个不完整的URL。 这将是一个wordpress网站。通过我的域上的proxy.php使用ajax来避免跨源请求阻止错误。 我的proxy.php的内容是:

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

在ajax函数发生的页面上我用这个测试:

<button id="srch">Search</button>

<script>
$("#srch").click(function(){
  var url= 'https://commons.wikimedia.org/w/api.php?action=query&generator=search&gsrnamespace=6&gsrsearch=%22stones%22&gsrlimit=20&gsroffset=20&prop=imageinfo&iiprop=url&format=json&callback=?';
url = '../proxy.php?url='+url;
$.ajax({
    url: url,
    dataType: 'jsonp',
    success:  function () {
alert ("success");
    console.log(data);
    }
  });
});

</script>

如果我使用dataType: jsonp,我会在GET网址中看到此内容: http://www.mysitename.com/proxy.php?callback=jQuery1111036782271532490285_1408436867392&url=https%3A%2F%2Fcommons.wikimedia.org%2Fw%2Fapi.php%3Faction%3Dquery%26%23038%3Bgenerator%3Dsearch%26%23038%3Bgsrnamespace%3D6%26%23038%3Bgsrsearch%3D%2522stones%2522%26%23038%3Bgsrlimit%3D20%26%23038%3Bgsroffset%3D20%26%23038%3Bprop%3Dimageinfo%26%23038%3Biiprop%3Durl%26%23038%3Bformat%3Djson%26%23038%3Bcallback%3D%3F&_=1408436867393

如果我使用dataType: json,我的控制台会显示GET已发送至http://www.mysitename.com/proxy.php?url=https%3A%2F%2Fcommons.wikimedia.org%2Fw%2Fapi.php%3Faction%3Dquery%26%23038%3Bgenerator%3Dsearch%26%23038%3Bgsrnamespace%3D6%26%23038%3Bgsrsearch%3D%2522stones%2522%26%23038%3Bgsrlimit%3D20%26%23038%3Bgsroffset%3D20%26%23038%3Bprop%3Dimageinfo%26%23038%3Biiprop%3Durl%26%23038%3Bformat%3Djson%26%23038%3Bcallback%3D%3F

并且不包含我指定的其余网址。

有人可以告诉我为什么我指定的网址正在改变/切断?这个Jquery在url地址中的长序列是什么?

1 个答案:

答案 0 :(得分:1)

您正在弄乱url参数。 它应该只包含真实url而不是您尝试在GET中传递的变量。

使用data变量将url变量传递给后端。像:

$("#srch").click(function(){
  var url= 'http://en.wikipedia.org/w/api.php?action=query&list=allimages&ailimit=15&aifrom=stones&aiprop=url&format=json&callback=?';
  var urlbackend = '../proxy.php';
  $.ajax({
    url: urlbackend,
    data: { url: url },
    dataType: 'jsonp',
    success:  function () {
      alert ("success");
      console.log(data);
    }
  });
});

您在data参数中设置的内容将被解压缩到urlGET中的POST变量,您应该在后端脚本中看到它。