ทำไมไม่พบไฟล์ json ของฉัน


85

ฉันมีไฟล์ json ในโฟลเดอร์เนื้อหาภายในโครงการ asp.net ของฉัน:

<projectName>
    \Content
        NBCCJr.json

... และรหัสเพื่อเข้าถึง:

$.getJSON('~/Content/NBCCJr.json', function (data) {
    $.each(data, function(i, dataPoint) {
        // Bla
      });
  });
)

... แต่ไม่มีอะไรเกิดขึ้นเมื่อมีการเรียกรหัส คอนโซลของเบราว์เซอร์แจ้งว่า "ไม่สามารถโหลดทรัพยากรได้: เซิร์ฟเวอร์ตอบสนองด้วยสถานะ 404 (ไม่พบ)"

ทำไมถึงไม่พบ? "tilde whack filename" เส้นทางไปยังไฟล์ไม่ถูกต้องใช่หรือไม่

อัปเดต

ฉันยังลองด้วยการ "ตี" ไปข้างหลัง:

$.getJSON('~\Content\NBCCJr.json', function (data) {

... และได้ผลลัพธ์เดียวกัน (" ไม่สามารถโหลดทรัพยากร: เซิร์ฟเวอร์ตอบสนองด้วยสถานะ 404 (ไม่พบ) ")

อัปเดต 2

จากนั้นฉันก็ลองใช้มันมีการตีไว้ข้างหน้าดังนี้:

$.getJSON('Content/NBCCJr.json', function (data) {

... และฉันได้รับข้อความที่ไม่ชัดเจนนี้ในคอนโซล:

*GET http://localhost:9702/Content/NBCCJr.json 404 (Not Found) jquery.js:8724
XHR finished loading: "http://localhost:9702/Content/NBCCJr.json".*

มันจึงไม่พบและยังโหลดต่อไป?

อัปเดต 3

เมื่อฉันพยายามนำทางไปยังไฟล์ในเบราว์เซอร์โดยเปลี่ยน:

http://localhost:9702/Default.cshtml

...ถึง:

http://localhost:9702/Content/NBCCJr.json

ฉันได้รับข้อความ WSOD ที่ให้ข้อมูลจาก Vint Cerf, Tim Berners-Lee และ / หรือ Al Gore พูดว่า:

ข้อผิดพลาด HTTP 404.3 - ไม่พบหน้าที่คุณร้องขอไม่สามารถให้บริการได้เนื่องจากการกำหนดค่าส่วนขยาย หากเพจเป็นสคริปต์ให้เพิ่มตัวจัดการ หากควรดาวน์โหลดไฟล์ให้เพิ่มแผนที่ MIME

อัปเดต 4

ขอบคุณ JAM ตอนนี้ใช้งานได้แล้ว

ฉันต้องเพิ่มสิ่งนี้ใน Web.Config:

  <system.webServer>
    <staticContent>
      <mimeMap fileExtension=".json" mimeType="application/json" />
    </staticContent>
  </system.webServer>

อย่ากังวลกับรหัสในตอนนี้ดูว่าคุณสามารถค้นหาไฟล์ในเบราว์เซอร์ของคุณเพื่อเริ่มต้นด้วยหรือไม่
Lee Taylor

ฉันได้แสดงความคิดเห็นเกี่ยวกับรหัสทั้งหมดหลังจากบรรทัดที่แสดงด้วยเหตุผลนั้น IOW ฟังก์ชันว่างเปล่า
บีเคลย์แชนนอน

คุณจัดการแสดง json ในเบราว์เซอร์ของคุณหรือไม่? เช่นการใส่ URL ลงในแถบที่อยู่โดยตรงหรือไม่
Lee Taylor

@greg: มัน "กำ" คืออะไร?
บีเคลย์แชนนอน

2
อัปเดต 4 แก้ไขให้ฉัน! Thks \ o /
rodrigorf

คำตอบ:


97

คุณได้ลองลบ~หรือไม่?

ใน:

$.getJSON('/Content/dumboJr.json', function (data) {
    $.each(data, function(i, dataPoint) {
        // Bla
      });
  });
)

ในการอนุญาตให้ IIS ให้บริการไฟล์ JSON ให้ลองเพิ่มสิ่งนี้ใน web.config ของคุณ:

<staticContent>
    <mimeMap fileExtension=".json" mimeType="application/json" />
</staticContent>

ใช่ (ตอนนี้ฉันมีแล้ว) สิ่งนี้: $ .getJSON ('/ Content / NBCCJr.json', function (data) {ให้การตอบสนองเหมือนกัน
B. Clay Shannon

มันเป็นคำตอบ 404 หรือไม่? คุณได้ลองนำทางไปยังไฟล์โดยตรงในเบราว์เซอร์ของคุณหรือไม่? โฟลเดอร์เนื้อหาอยู่ในรูทของโครงการเว็บของคุณหรือไม่
JAM

ใช่โพสต์บอกอย่างนั้น โปรดดูการอัปเดตของฉัน ใช่เนื้อหาเป็นโฟลเดอร์ระดับแรกตามที่ระบุไว้ในโพสต์ต้นฉบับ
บีเคลย์แชนนอน

ลองดูที่กระทู้นี้
JAM

หากคุณเพิ่มประเภท mime web.config ที่ระบุคุณจะสบายดี :)
JAM

22

วิธีแก้คือคุณต้องเพิ่มนามสกุลไฟล์ json ในประเภท MIME

วิธีที่ 1

ไปที่ IIS เลือกแอปพลิเคชันของคุณและค้นหาประเภท MIME

ใส่คำอธิบายภาพที่นี่

คลิกที่เพิ่มจากแผงด้านขวา

นามสกุลไฟล์ = .json

ประเภท MIME = application / json

ใส่คำอธิบายภาพที่นี่

หลังจากเพิ่มประเภทไฟล์. jsonในประเภท MIMEให้รีสตาร์ท IISและพยายามเข้าถึงไฟล์ json


วิธีที่ 2

ไปที่ web.config ของแอปพลิเคชันนั้นแล้วเพิ่มบรรทัดนี้เข้าไป

 <system.webServer>
   <staticContent>
     <mimeMap fileExtension=".json" mimeType="application/json" />
   </staticContent>
 </system.webServer>

2

ลองใส่ไฟล์ * .json ใน webRoot ไม่ใช่ในโฟลเดอร์ย่อย จากนั้นอ้างอิงเช่น:

$.getJSON('NBCCJr.json', function (data) {

แน่นอนว่าสิ่งนี้ต้องการการรวมและการสร้างอินสแตนซ์ก่อนหน้าของอ็อบเจ็กต์ระบบ jQuery จาก: jquery.min.jsหรือโครงสร้าง JSON จาก: json2-1.0.min.js


1

ฉันเปลี่ยน. json เป็น. txt และคำขอทำงานได้ดี ฉันไม่แน่ใจเกี่ยวกับผลที่ตามมา. txt อาจทำให้เกิด


1

หากคุณใช้ASP.NET Coreเพียงแค่ใส่ไฟล์wwwrootแต่ถ้าคุณใช้ASP.NETเฟรมเวิร์กสิ่งนี้จะอนุญาตให้ใช้นามสกุล JSON จาก web.config ดังนี้:

<staticContent>
    <mimeMap fileExtension=".json" mimeType="application/json" />
</staticContent>

และ

<location path="Content">
    <system.web>
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
</location>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.