-2

似乎已经有很多关于此的 SO 条目,但我找不到解决我的问题的 Silver Bullet。

基本上我只想要一种 Ajax 方式在我的页面上显示谷歌搜索结果,所以我制作了一个示例页面,其中包含如下代码:

<html>  
<head>  
<title>Baidu</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.min.js"></script>
</style>
<script>
$(document).ready(function() {
    var obj = 
        $.ajax({
            url:"https://www.google.com/search?q=stackoverflow"
        });
    alert(obj);
});
</script>
<body>
</body>  
</html>

之后我得到了一个[object object]。所以我的问题是:

  1. 我得到了什么以及如何解析它?
  2. 在我的情况下,我应该为方法jQuery.ajax()设置哪些参数?
4

3 回答 3

1

由于Same Origin Policy,您无法向 Google 发出 ajax 调用,因为它们的域与您的代码的域不同。

建议的解决方案是通过驻留在同一域上的服务器端脚本代理请求,并发出 HTTP 请求以获取搜索结果或使用自定义搜索 API

于 2013-07-18T08:12:08.423 回答
0

谷歌已经制作了 API 来进行自定义搜索和设计。这是链接

要查看[object object]内容,请使用此功能:

alert(print_r(obj,true));

function print_r (array, return_val) {
  var output = '',
    pad_char = ' ',
    pad_val = 4,
    d = this.window.document,
    getFuncName = function (fn) {
      var name = (/\W*function\s+([\w\$]+)\s*\(/).exec(fn);
      if (!name) {
        return '(Anonymous)';
      }
      return name[1];
    },
    repeat_char = function (len, pad_char) {
      var str = '';
      for (var i = 0; i < len; i++) {
        str += pad_char;
      }
      return str;
    },
    formatArray = function (obj, cur_depth, pad_val, pad_char) {
      if (cur_depth > 0) {
        cur_depth++;
      }

      var base_pad = repeat_char(pad_val * cur_depth, pad_char);
      var thick_pad = repeat_char(pad_val * (cur_depth + 1), pad_char);
      var str = '';

      if (typeof obj === 'object' && obj !== null && obj.constructor && getFuncName(obj.constructor) !== 'PHPJS_Resource') {
        str += 'Array\n' + base_pad + '(\n';
        for (var key in obj) {
          if (Object.prototype.toString.call(obj[key]) === '[object Array]') {
            str += thick_pad + '[' + key + '] => ' + formatArray(obj[key], cur_depth + 1, pad_val, pad_char);
          }
          else {
            str += thick_pad + '[' + key + '] => ' + obj[key] + '\n';
          }
        }
        str += base_pad + ')\n';
      }
      else if (obj === null || obj === undefined) {
        str = '';
      }
      else {
        str = obj.toString();
      }

      return str;
    };

  output = formatArray(array, 0, pad_val, pad_char);

  if (return_val !== true) {
    if (d.body) {
      this.echo(output);
    }
    else {
      try {
        d = XULDocument; 
        this.echo('<pre xmlns="http://www.w3.org/1999/xhtml" style="white-space:pre;">' + output + '</pre>');
      } catch (e) {
        this.echo(output);
      }
    }
    return true;
  }
  return output;
于 2013-07-18T08:30:37.707 回答
0

如前所述,您不能对另一个域使用 ajax 调用

要以编程方式检索谷歌搜索结果,您可以尝试使用他们的自定义搜索 api

于 2013-07-18T08:19:43.680 回答