【问题标题】:Jquery Ajax not workingJquery Ajax 不工作
【发布时间】:2012-03-07 12:21:48
【问题描述】:

几天来,我们一直在努力寻找解决方案,但我们无法弄清楚为什么这段代码不起作用。

var bing_url='http://api.search.live.net/json.aspx?JsonType=callback&JsonCallback=?&Appid=[OurApp Id]&query='+keyword+'&sources=web';

$.ajax({
  type: "GET",
  url: bing_url,
  dataType:"jsonp",
  success: function(response)
  {
    $("#result").html('');
    if(response.SearchResponse.Web.Results.length)
    {
      $.each(response.SearchResponse.Web.Results, function(i,data)
      {
        var title=data.Title;
        var dis=data.Description; 
        var url=data.Url;

        var finall="<div class='webresult'><div class='title'><a href='"+url+"'>"+title+"</a></div><div class='desc'>"+dis+"</div><div class='url'>"+url+"</div></div>";
        $("#result").append(final); // Result

      });

      parentwin.document.getElementsByTagName("body").item(0).innerHTML += final;
    }
    else
    {
      $("#result").html("<div id='no'>No Results</div>");
    }
  }             //success
});

此脚本将从 IE 的任何其他网页调用。它将使用 bing api 从 bing 搜索结果,然后将结果附加到原始页面。

问题:

当我们直接打开它时,这个脚本正在运行。但是从另一个页面调用它就不起作用了。

【问题讨论】:

  • 只有IE有问题吗?如果您查看您的开发者控制台,您是否看到有任何请求发出?
  • 另外,做一些调试。如果将成功回调替换为 function(){ alert(1) },是否有效?找出失败的确切点。
  • @nicholaides 成功回调在我们从其他网页运行时不显示警报,否则它正在工作并显示来自 bing search api 的结果。

标签: javascript jquery ajax jsonp bing


【解决方案1】:

您很可能违反了same origin policy。您只能访问与脚本位于同一服务器上的文件。

同样来自关于 XmlHttpRequest 对象的 wiki 文章:

XMLHttpRequest 受浏览器的同源策略约束,出于安全原因,请求只有在向原始网页提供服务的同一服务器发出时才会成功。如果需要,还有其他方法可以规避此政策。

【讨论】:

  • @tresko 感谢您的回复。但是当我们直接运行脚本时,它运行良好但是当它从另一个网页调用时,如果它违反相同的规定,它就不起作用源策略,然后是直接执行时的工作方式。
  • @user1254630 : 当我们直接打开这个脚本时,它是有效的。但是当它从另一个页面调用时它不起作用。 ..这是你写的。
猜你喜欢
  • 2014-03-28
  • 2010-12-23
  • 2016-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多