Apakah markup JSON ini valid?

Saya mencoba mendapatkan beberapa informasi dari situs pengiriman Rusia. Menjadi seorang n00b untuk JSON/Jquery/Internet saya terjebak dalam memasukkan data ke dalam format json.

Mengikuti API perusahaan, saya membuka URL: http://emspost.ru/api/rest/?callback=json&method=ems.calculate&from=city--abakan&to=city--anadyr&weight=1

Ini mengembalikan:

json({
  "rsp": {
    "stat": "ok",
    "price": "750",
    "term": {
      "min": 5,
      "max": 9
    }
  }
})

Mengikuti dokumen Jquery, saya telah mencoba:

<script>
$.getJSON("http://emspost.ru/api/rest/?callback=json&method=ems.calculate&from=city--abakan&to=city--anadyr&weight=1",
  function(data) {
    alert(data);
  });
</script>

Ini mengembalikan nol. Tahu apa yang saya lakukan salah?


person jdkealy    schedule 26.06.2010    source sumber
comment
lihat stackoverflow.com/questions/3113924/   -  person Anurag    schedule 26.06.2010


Jawaban (2)


Gunakan callback=? sebagai gantinya, seperti ini:

$.getJSON("http://emspost.ru/api/rest/?callback=?&method=ems.calculate&from=city--abakan&to=city--anadyr&weight=1",
function(data){
  alert(data);
});

Kemudian Anda akan mendapatkan objek Anda dalam peringatan :) JSONP bekerja dengan mengambil panggilan balik itu di string kueri dan memanggil fungsi itu (yang tidak ada, kecuali Anda membuat function json() {} ketika kembali. Saat Anda melakukan ?callback=? jquery secara dinamis menamainya success fungsi yang Anda berikan ke $.getJSON() dan menggantinya, seperti ini: ?callback=FunctioNameGiven, sehingga akan benar-benar berjalan benar.

Jika Anda memikirkan cara kerjanya, pada dasarnya:

<script type="text/javascript">
  //returned javascript here, e.g. FunctioNameGiven({ object data });
</script>

Hal ini dilakukan agar permintaan GET, dan tidak dibatasi oleh aturan kebijakan asal yang sama, begitulah cara kerja JSONP ketika permintaan JSON normal diblokir :)

person Nick Craver    schedule 26.06.2010
comment
Saya ingin menambahkan bahwa '?' tanda diperlukan untuk memicu dukungan JSONP di jQuery... jika dihilangkan, jQuery tidak akan mengetahui itu JSONP dan akan mencoba mengambil data seolah-olah itu adalah permintaan JSON normal, yang tidak akan berfungsi. - person chakrit; 26.06.2010
comment
@chakrit - Poin bagus, saya akan menambahkan peringatan, ini berlaku untuk $.getJSON(), tetapi tidak untuk jQuery secara keseluruhan (meskipun ini adalah rute termudah), misalnya: jsfiddle.net/jF6yj - person Nick Craver; 26.06.2010

Anda menggunakan fungsi panggilan balik (callback=json) yang menjalankan fungsi json saat dimuat.

Coba DAPATKAN ini sebagai gantinya:

http://emspost.ru/api/rest/?method=ems.calculate&from=city--abakan&to=city--anadyr&weight=1

Btw, apakah permintaan Anda bersifat lintas domain? Jika demikian, xhr tidak disarankan.

person tcooc    schedule 26.06.2010