为什么传递数据对象时第一个$ .ajax错误?

时间:2014-06-07 02:07:14

标签: javascript jquery ajax

我不确定为什么会出现第一个$.ajax()错误。我试图将url参数作为ajax数据属性的一部分传递。

这是一个小提琴,看到第一个ajax调用失败而第二个成功:http://jsfiddle.net/f9e5Y/

这是JavaScript:

var urlParameters = {
  page: 1,
  api_key:'...',
  tags: 'kittens',
  method: 'flickr.photos.search',
  per_page: 3,
  format: 'json',
  jsoncallback: '?'
};

$.ajax({
  url: 'http://api.flickr.com/services/rest',
  type: 'GET',
  dataType: 'json',
  data: urlParameters,
  success: function (data) {
    console.log('ajax 1 - success');
    console.log('data');
  },
  error: function () {
    console.log('ajax 1 - error');   
  }
});

$.ajax({
  url: 'http://api.flickr.com/services/rest/?page=1&api_key=...&tags=kitten&method=flickr.photos.search&per_page=3&format=json&jsoncallback=?',
  type: 'GET',
  dataType: 'json',
  success: function (data) {
    console.log('ajax 2 - success');
    console.log(data);
  },
  error: function () {
    console.log('ajax 2 - error');   
  }
});

1 个答案:

答案 0 :(得分:1)

我假设jQuery仅扫描callback=?模式的原始URL,以生成并插入随机函数名称,而不是它从data构建的URL。

所以你实际需要的是data: 'jsonp'并通过jsonp: 'jsoncallback'设置回调参数 name

var urlParameters = {
  page: 1,
  api_key: '...',
  tags: 'kittens',
  method: 'flickr.photos.search',
  per_page: 3,
  format: 'json'
};

$.ajax({
  url: 'http://api.flickr.com/services/rest',
  type: 'GET',
  dataType: 'jsonp',
  data: urlParameters,
  jsonp: 'jsoncallback',
  success: function (data) {
    console.log('ajax 1 - success');
    console.log('data');
  },
  error: function () {
    console.log('ajax 1 - error');   
  }
});