นี่เป็นมาร์กอัป JSON ที่ถูกต้องหรือไม่

ฉันกำลังพยายามรับข้อมูลบางอย่างจากเว็บไซต์จัดส่งของรัสเซีย เนื่องจากเป็น n00b สำหรับ JSON/Jquery/Internets ฉันติดอยู่ในการรับข้อมูลในรูปแบบ json

ตาม API ของบริษัท ฉันไปที่ URL: http://emspost.ru/api/rest/?callback=json&method=ems.calculate&from=city--abakan&to=city--anadyr&weight=1

ผลตอบแทนนี้:

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

ตามเอกสารของ Jquery ฉันได้ลองแล้ว:

<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>

สิ่งนี้จะคืนค่าเป็นโมฆะ มีความคิดอะไรบ้างที่ฉันทำอะไรผิด?


person jdkealy    schedule 26.06.2010    source แหล่งที่มา
comment
ดู stackoverflow.com/questions/3113924/   -  person Anurag    schedule 26.06.2010


คำตอบ (2)


ใช้ callback=? แทน เช่นนี้

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

จากนั้นคุณจะได้รับวัตถุของคุณในการแจ้งเตือน :) JSONP ทำงานโดยรับการติดต่อกลับในสตริงการสืบค้นและเรียกใช้ฟังก์ชันนั้น (ซึ่งไม่มีอยู่ เว้นแต่คุณจะสร้าง function json() {} เมื่อมันส่งคืน เมื่อคุณทำ ?callback=? jquery จะตั้งชื่อแบบไดนามิกว่า success ฟังก์ชันที่คุณให้กับ $.getJSON() และแทนที่ในลักษณะนี้: ?callback=FunctioNameGiven ดังนั้นมันจะทำงานจริง อย่างถูกต้อง

หากคุณลองคิดดูว่ามันทำงานอย่างไร โดยพื้นฐานแล้ว:

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

สิ่งนี้เสร็จสิ้นเพื่อให้เป็นคำขอ GET และไม่ถูกจำกัดด้วยกฎนโยบายที่มีต้นกำเนิดเดียวกัน นั่นคือวิธีการทำงานของ JSONP ในกรณีที่คำขอ JSON ปกติถูกบล็อก :)

person Nick Craver    schedule 26.06.2010
comment
ฉันต้องการเพิ่มว่า '?' จำเป็นต้องมีเครื่องหมายเพื่อทริกเกอร์การสนับสนุน JSONP ใน jQuery... หากไม่ระบุ jQuery จะไม่ทราบว่าเป็น JSONP และจะพยายามดึงข้อมูลราวกับว่าเป็นคำขอ JSON ปกติซึ่งจะไม่ทำงาน - person chakrit; 26.06.2010
comment
@chakrit - จุดดี ฉันจะเพิ่มข้อแม้ นี่เป็นเรื่องจริงสำหรับ $.getJSON() แต่ไม่ใช่ jQuery โดยรวม (แม้ว่าจะเป็นเส้นทางที่ง่ายที่สุด) ตัวอย่างเช่น: jsfiddle.net/jF6yj - person Nick Craver; 26.06.2010

คุณกำลังใช้ฟังก์ชันโทรกลับ (callback=json) ซึ่งเรียกใช้ฟังก์ชัน json เมื่อโหลด

ลองรับสิ่งนี้แทน:

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

อย่างไรก็ตาม คำขอของคุณเป็นโดเมนข้ามโดเมนใช่ไหม หากเป็นเช่นนั้น ไม่แนะนำให้ใช้ xhr

person tcooc    schedule 26.06.2010