2011-08-31 54 views
0

我需要使用AJAX调用来获取新闻源形式谷歌API和我有以下代码:直接使用URL在浏览器的工作原理,同时获取新闻使用jQuery阿贾克斯饲料

function submitSearch(){ 
     var query = "business"; 
     var target = "https://ajax.googleapis.com/ajax/services/search/news?v=1.0&q=" + query + "&callback=processResults"; 

     $.ajax({ 
      url: target, 
      cache: false, 
      success: function(data) { 
       $('#resultSet').html(data); 
      }, 
      error: alert(target) 
     }); 
    } 

出于某种原因使用AJAX调用会导致错误。

回答

0
"jsonp": Loads in a JSON block using JSONP. Adds an extra "?callback=?" to 
the end of your URL to specify the callback. Disables caching by appending 
a query string parameter, "_=[TIMESTAMP]", to the URL unless the cache option 
is set to true. 

裁判:http://api.jquery.com/jQuery.ajax/

需要设置dataType:"jsonp"和URL

var query = "business"; 
var target = "https://ajax.googleapis.com/ajax/services/search/news?v=1.0&q="+query; 
$.ajax({ 
    url: target, 
    cache: false,     
    dataType:'jsonp',   
    success: function(data) { 
     alert(data.responseData.results[0].GsearchResultClass); 

    }, 
    error: function(jxhr,e){ 
    alert(jxhr.status+" - "+e.responseText);   
    } 
}); 

的末尾删除&callback=processData这里是小提琴http://jsfiddle.net/6gCRF/8/

+0

http://jsfiddle.net/6gCRF/9/ – Rafay

0

您不能使AJAX请求跨域。 (查找跨域起源策略)

也就是说,有一个解决方法:JSONP。这本质上是一种黑客攻击,但它完成了工作。至于JQuery的具体实现:http://api.jquery.com/jQuery.getJSON/

0

由于same-origin-policy,你不能做跨域的ajax请求,否则你可以使用jsonp,即带有padding的json。

同源策略(SOP)是一种浏览器安全措施,它限制JavaScript代码与源自其他网站的资源进行交谈,即从任何其他域和/或端口加载的资源。例如。 JS在网页上运行http://google.com不能从http://cbs.com加载甚至http://cbs.com:8081

工作围绕SOP

一)代理在您的服务器数据交互:你创建你的应用程序一个终点,讨论到外部网址并返回结果

b)加载JSON响应转换成一个标签,否则JSONP即JSON与填充

有与此一起去如何做到这一点作为脚本读取了一些服务器端更改..语言..

基本反应应该是这样的:

jsonCallback({"Name": "Random", "Id" : 2432, "Rank": 453})