2011-12-05 2 views
5

Tôi đang cố truy xuất yahoo autocomplete.jQuery: Yahoo Autocomplete/Autosuggest

url JSON của Yahoo là thế này: http://ff.search.yahoo.com/gossip?output=fxjson&command=query

Vì vậy, tôi có:

$("selector").autocomplete({ 
     source: function(request, response) { 
      $.ajax({ 
       url: "http://ff.search.yahoo.com/gossip", 
       dataType: "jsonp", 
       data: { 
        "output" : "fxjson", 
        "command" : request.term 
       }, 
       success: function(data) { 
        response(data[1]) 
       } 
      }) 
     } 
    }); 

Và đây là một ví dụ: http://jsfiddle.net/yQbdb/

Ai đó có thể nhận ra một sai lầm hoặc những gì tôi tôi làm sai ? Nó sẽ hoạt động.

Cảm ơn

+0

wow, trông giống như một lỗi. – noob

Trả lời

1

Thiết output để jsonp công trình đối với tôi.

Xem example query cho cấu trúc của đầu ra.

Giải thích bên dưới.

Mã số là HERE.

$("#wd6450").autocomplete({ 
    source: function(request, response) { 
     $.ajax({ 
      url: "http://ff.search.yahoo.com/gossip", 
      dataType: "jsonp", 
      data: { 
       "output": "jsonp", 
       "command": request.term 
      }, 
      success: function(data) { 
       var suggestions = []; 
       // for each element in the data.gossip.results array ... 
       $.each(data.gossip.results, function(i, val) { 
        // .. push the value of the key inside our array 
        suggestions.push(val.key); 
       }); 
       // call response with our collected values 
       response(suggestions); 

      } 
     }); 
    } 
}); 

Giải thích:

Bằng cách sử dụng dataType: "jsonp" jQuery hy vọng định dạng đầu ra được trong JSONP. Khi bạn thực hiện cuộc gọi từ mã của mình bằng cách sử dụng output: "fxjson" URL trông giống như this nhưng như bạn có thể thấy đầu ra không phải là JSONP hợp lệ, vì cuộc gọi lại không được gọi.

Mặt khác khi bạn chỉ định output: "jsonp" truy vấn trông giống như this và như bạn có thể nhìn thấy đầu ra là một JSONP hợp lệ - callback được gọi.

Bạn đã liên kết một ví dụ của Amazon trong các nhận xét. $.ajax() cuộc gọi sẽ cố gắng URL như this. Đầu ra từ webservice của Amazon là JSONP hợp lệ, bởi vì gọi lại được gọi với tất cả dữ liệu.

Vì vậy, kết quả là: Yahoo webservices sẽ trả về định dạng trong JSONP nếu bạn cung cấp thông số ?output=jsonp trong URL bằng cách định cấu hình $.ajax() với output: "jsonp". Dịch vụ web của Amazon trả về định dạng này theo mặc định mà không có bất kỳ tham số bổ sung nào. Đây là cấu hình webservice cụ thể và phải được tư vấn với tài liệu của nó hoặc các resourcers có liên quan khác.

Thông tin về JSONP có sẵn HERE.

+0

Vâng, nó là chính xác nhưng nó không có ý nghĩa với tôi. Bạn có thể vui lòng chia nhỏ nó cho tôi để tôi có thể sử dụng nó trong tương lai không? Bởi vì tưởng tượng tôi đang sử dụng autosuggest của ebay: http://anywhere.ebay.com/services/suggest/?q=test mà không có đầu ra vv Cảm ơn – jQuerybeast

+0

@ jQuerybeast Đặt 'output' thành' fxjson' đang tạo '$. ajax' tức giận vì gọi lại JSONP không được gọi. Tôi tìm thấy nó bằng cách thêm một trình xử lý lỗi vào cuộc gọi ajax. Sau đó, tôi đã cố gắng thay đổi 'đầu ra' và nó bắt đầu hoạt động. – kubetz

+0

JSONP được gọi từ dataType. Và trong trường hợp bạn phải đặt đầu ra thành jsonp, nó hoạt động như thế nào: http://jsfiddle.net/HaQTA/? – jQuerybeast