ด้วยเหตุผลบางอย่างในขณะที่ใช้ AJAX (กับฉัน Dashcodeแอพลิเคชันที่พัฒนาแล้ว) 0
เบราว์เซอร์เพียงแค่หยุดการอัปโหลดและผลตอบแทนของรหัสสถานะ ทำไมสิ่งนี้ถึงเกิดขึ้น
ด้วยเหตุผลบางอย่างในขณะที่ใช้ AJAX (กับฉัน Dashcodeแอพลิเคชันที่พัฒนาแล้ว) 0
เบราว์เซอร์เพียงแค่หยุดการอัปโหลดและผลตอบแทนของรหัสสถานะ ทำไมสิ่งนี้ถึงเกิดขึ้น
คำตอบ:
อีกกรณีหนึ่ง:
มันอาจจะเป็นไปได้ที่จะได้รับรหัสสถานะของ0
ถ้าคุณได้ส่งโทร AJAX และการฟื้นฟูของเบราว์เซอร์ถูกเรียกก่อนที่จะได้รับการตอบสนอง การโทร AJAX จะถูกยกเลิกและคุณจะได้รับสถานะนี้
<form onsubmit="return false;">
e.preventDefault();
จากประสบการณ์ของฉันคุณจะเห็นสถานะเป็น 0 เมื่อ:
<button onclick="">submit</button>
ปัญหาเดียวกันที่นี่เมื่อใช้ แก้ไขแล้วโดยใช้<input type="button" onclick="">
รหัสสถานะ 0 หมายความว่าไม่สามารถเข้าถึง URL ที่ร้องขอได้ โดยการเปลี่ยนhttp: // something / somethingเป็นhttps: // something / somethingทำงานได้สำหรับฉัน IE โยนข้อผิดพลาดว่า "การอนุญาตถูกปฏิเสธ" เมื่อรหัสสถานะเป็น 0 เบราว์เซอร์อื่นไม่
สิ่งสำคัญคือต้องทราบว่าการโทร ajax อาจล้มเหลวแม้จะอยู่ในเซสชันที่กำหนดโดยคุกกี้ที่มีโดเมนนำหน้าด้วย www เมื่อคุณโทรสคริปต์ php ของคุณเช่นไม่มี www คำนำหน้าใน url การโทรจะล้มเหลวและ viceversa เช่นกัน
เพราะสิ่งนี้จะปรากฏขึ้นเมื่อคุณ google ajax สถานะ 0 ฉันต้องการที่จะออกเคล็ดลับที่ใช้เวลาหลายชั่วโมงฉันเสียเวลา ... ฉันใช้ ajax เพื่อโทรหาบริการ PHP ที่เกิดขึ้นเป็น REST_Controller ของ Phil สำหรับ Codeigniter (ไม่แน่ใจว่ามันมี จะทำอะไรกับมันหรือไม่) และยังคงได้รับสถานะ 0 อ่าน 0 และมันทำให้ฉันบ้า ฉันตรวจแก้จุดบกพร่องและสังเกตว่าเมื่อใดฉันจะสะท้อนและกลับมาแทนที่จะออกจากข้อความที่ฉันได้รับความสำเร็จ ในที่สุดฉันก็ปิดการดีบักและลองและมันก็ใช้ได้ ดูเหมือนว่าดีบักเกอร์ xDebug ด้วย PHP เป็นอย่างใดปรับเปลี่ยนการตอบสนอง หากคุณใช้ตัวดีบัก PHP ลองปิดเพื่อดูว่ามีประโยชน์หรือไม่
ฉันพบอีกกรณีหนึ่งที่ jquery ให้รหัสสถานะ 0 แก่คุณ - ถ้าด้วยเหตุผลบางอย่าง XMLHttpRequest ไม่ได้ถูกกำหนดไว้คุณจะได้รับข้อผิดพลาดนี้
เห็นได้ชัดว่าสิ่งนี้จะไม่เกิดขึ้นบนเว็บ แต่มีข้อผิดพลาดในการสร้าง Firefox ตอนกลางคืนทำให้สิ่งนี้เกิดขึ้นในส่วนเสริมที่ฉันเขียน :)
jQuery.ajax()
วัตถุ XHR คำขอไม่ได้ถูกสร้างขึ้นแม้ในการโทร AJAX ยังคงได้รับ f.open ไม่ใช่ฟังก์ชั่นและรหัสสถานะ 0 เกิดจาก: ฉันกลับ$.ajaxSettings.xhr
วัตถุจาก$.ajaxSetup({xhr})
กลับมาnew window.XMLHttpRequest();
แก้ปัญหาแทน
ฉันมีปัญหาเดียวกันและเกี่ยวข้องกับเบราว์เซอร์ XSS (cross site scripting) block ฉันจัดการเพื่อให้มันทำงานโดยใช้เซิร์ฟเวอร์
การส่งแบบฟอร์ม "อุบัติเหตุ" เป็นปัญหาที่ฉันมี ฉันเพิ่งลบแท็ก FORM ทั้งหมดและดูเหมือนว่าจะแก้ไขปัญหาได้ ขอบคุณทุกคน!
เรามีปัญหาที่คล้ายกัน - รหัสสถานะ 0 ใน jquery ajax call - และเราใช้เวลาทั้งวันในการวินิจฉัย เนื่องจากยังไม่มีใครพูดถึงเหตุผลนี้ฉันคิดว่าฉันจะแบ่งปัน
ในกรณีของเราปัญหาเซิร์ฟเวอร์ HTTP ขัดข้อง ข้อผิดพลาดบางอย่างใน PHP กำลังพัด Apache ดังนั้นในตอนท้ายไคลเอ็นต์ก็ดูเหมือนว่า:
mirek@toccata:~$ telnet our.server.com 80
Trying 180.153.xxx.xxx...
Connected to our.server.com.
Escape character is '^]'.
GET /test.php HTTP/1.0
Host: our.server.com
Connection closed by foreign host.
mirek@toccata:~$
โดยที่ test.php มีรหัสการหยุดทำงาน ไม่มีข้อมูลที่ส่งคืนจากเซิร์ฟเวอร์ (ไม่ใช่ส่วนหัว) => การโทร ajax ถูกยกเลิกด้วยสถานะ 0
ในกรณีของฉันมันก็เกิดจากการใช้เซิร์ฟเวอร์ Django ของฉันภายใต้http://127.0.0.1:8000/
แต่ส่งโทร Ajax http://localhost:8000/
เพื่อ แม้ว่าคุณจะคาดหวังให้พวกเขาแมปไปยังที่อยู่เดียวกันพวกเขาก็ไม่แน่ใจว่าคุณไม่ได้ส่งคำขอของคุณไปยัง localhost
ในกรณีของเราเชื่อมโยงหน้าก็เปลี่ยนจากhttpsเพื่อhttp แม้ว่าผู้ใช้จะล็อกอิน แต่ก็ป้องกันไม่ให้โหลดด้วย AJAX
ในกรณีของฉันการตั้งค่าurl: ''
ในการตั้งค่า ajax จะส่งผลให้รหัสสถานะ 0 ใน ie8 .. ดูเหมือนว่าเช่นจะไม่ทนต่อการตั้งค่าดังกล่าว
สำหรับฉันปัญหาเกิดขึ้นจาก บริษัท โฮสติ้ง (Godaddy) ที่ปฏิบัติงาน POST ซึ่งมีข้อมูลการตอบสนองมากมาย (มีอะไรมากกว่าสิบกิโลไบต์) เนื่องจากภัยคุกคามความปลอดภัยบางประเภท หากมากกว่า 6 สิ่งเหล่านี้เกิดขึ้นในหนึ่งนาทีโฮสต์ปฏิเสธที่จะเรียกใช้งานโค้ด PHP ที่ตอบสนองต่อคำขอ POST ระหว่างนาทีถัดไป ฉันไม่แน่ใจว่าโฮสต์ทำสิ่งใดแทนทั้งหมด แต่ฉันเห็นด้วย tcpdump ซึ่งเป็นแพคเก็ต TCP รีเซ็ตที่กำลังจะตอบสนองต่อคำขอ POST จากเบราว์เซอร์ สิ่งนี้ทำให้รหัสสถานะ http ที่ส่งคืนในวัตถุ jqXHR เป็น 0
การเปลี่ยนการดำเนินการจาก POST เป็น GET ช่วยแก้ปัญหาได้ ไม่ชัดเจนว่าทำไม Godaddy กำหนดขีด จำกัด นี้ แต่การเปลี่ยนรหัสนั้นง่ายกว่าการเปลี่ยนโฮสต์
ฉันคิดว่าฉันรู้ว่าสิ่งใดที่อาจทำให้เกิดข้อผิดพลาดนี้
ใน google chrome มีคุณสมบัติที่สร้างขึ้นเพื่อป้องกันการโจมตี ddos สำหรับส่วนขยายของ Google chrome
เมื่อคำขอ ajax ส่งคืนข้อผิดพลาดสถานะมากกว่า 500+ อย่างต่อเนื่องจะเริ่มส่งคำขออีกครั้ง
ดังนั้นจึงเป็นไปได้ที่จะได้รับสถานะ 0 จากคำขอต่อไปนี้
ในความพยายามที่จะชนะรางวัลด้วยเหตุผลที่โง่ที่สุดสำหรับปัญหาที่อธิบายไว้
ลืมโทร
xmlhttp.send(); //yes, you need this pivotal line!
ใช่ฉันยังคงได้รับผลตอบแทนสถานะเป็นศูนย์จากการโทร 'เปิด'
ในกรณีของฉันฉันได้รับสิ่งนี้ แต่ใช้กับ Safari Mobile เท่านั้น ปัญหาคือฉันใช้ URL แบบเต็ม ( http://example.com/whething.php ) แทนที่จะเป็นแบบสัมพัทธ์ (what.php) นี้ไม่ได้ทำให้รู้สึกใด ๆ แต่ก็ไม่สามารถจะเป็นปัญหา XSS เพราะเว็บไซต์ของฉันจะเป็นเจ้าภาพที่http://example.com ฉันเดาว่า Safari ดูที่ส่วน http และตั้งค่าสถานะโดยอัตโนมัติว่าเป็นคำขอที่ไม่ปลอดภัยโดยไม่ตรวจสอบส่วนที่เหลือของ URL
ในการแก้ไขปัญหาของฉันฉันพบ AJAX xmlhttpRequest.status == 0 อาจหมายความว่าการโทรของลูกค้ายังไม่ถึงเซิร์ฟเวอร์ แต่ล้มเหลวเนื่องจากปัญหาทางฝั่งไคลเอ็นต์ หากการตอบสนองมาจากเซิร์ฟเวอร์ดังนั้นสถานะจะต้องเป็นรหัสการตอบกลับ HTTP 1xx / 2xx / 3xx / 4xx / 5xx ต่อจากนี้ไปการแก้ไขปัญหาจะมุ่งเน้นไปที่ปัญหาของลูกค้าและอาจเป็นการเชื่อมต่อเครือข่ายอินเทอร์เน็ตหรือหนึ่งในนั้นที่ @Langdon อธิบายไว้ข้างต้น
สังเกตคอนโซลของเบราว์เซอร์ในขณะที่ทำคำขอหากคุณเห็น "นโยบายกำเนิดเดียวกันไม่อนุญาตให้อ่านทรัพยากรระยะไกลที่ http ajax ..... เหตุผล: cors header 'access-control-allow-origin' หายไป" คุณต้อง เพิ่ม "Access-Control-Allow-Origin" ในหัวข้อการตอบสนอง exa: ใน java คุณสามารถตั้งค่านี้ได้เช่น response.setHeader ("Access-Control-Allow-Origin", "*") โดยการตอบสนองคือ HttpServletResponse