【问题标题】:Ajax get request sending to incomplete urlAjax 获取请求发送到不完整的 url
【发布时间】:2014-08-19 06:38:19
【问题描述】:

由于我还不明白的原因,我可以在 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 url 中得到这个: 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

并且不包含我指定的 url 的其余部分。

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

【问题讨论】:

  • IMO 你应该对 url 参数进行 urlencode。
  • jsonp 调用附加了将数据传回“ajax”调用所需的回调参数。有关该部分的更多说明,请参阅json-p.org

标签: jquery ajax json wordpress jsonp


【解决方案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 参数中设置的内容将被编码为GETPOST 中的url 变量,您应该会在后端脚本中看到它。

【讨论】:

  • 如果我打我想要的网址en.wikipedia.org/w/…?我得到了我想要的 json 字符串。当我实施您的建议时,我在get 中得到了以下网址:dreamteammovies.com/… 导致错误的 html
  • @user3108832 但是url 参数现在是正确的。您是否考虑过 php 脚本中的问题? “错误的 html”包含什么内容?
  • 它包含一个通用的维基百科消息,当您连接到 api 时没有传递参数(错误),您认为 proxy.php 代码可能有什么问题?
  • @user3108832 在你的 php 代码中尝试echoing url 参数,看看 jquery 传递了什么
  • @user3108832 你应该在 ajax 调用的 firebug 响应选项卡中看到它;)
猜你喜欢
  • 1970-01-01
  • 2017-07-09
  • 2011-11-08
  • 1970-01-01
  • 1970-01-01
  • 2012-07-04
  • 1970-01-01
  • 1970-01-01
  • 2013-06-08
相关资源
最近更新 更多