簡體   English   中英

JSON未與jQuery.ajax()一起加載

[英]JSON not loading with jQuery.ajax()

我正在使用返回JSON數據的Web服務。

test.com/incident.do?JSON&sysparm_action=getRecords

在瀏覽器中加載此URL會提示我打開identity.do,該事件在記事本中打開會顯示有效的JSON數據。

然后,在同一個域的網頁中,我使用以下代碼:

$.ajax({
  beforeSend: function(xhr) {
 xhr.setRequestHeader('Authorization', authinfo);        
},
   url: "https://test.com/incident.do?JSON&sysparm_action=getRecords",
   dataType: 'json',
   type: 'GET',
   success: function(a,b,c) {
     alert(a);
   }
 });

但是,使用此代碼,我沒有收到任何JSON,僅收到此響應

HTTP/1.1 200 OK
Date: Tue, 13 Jul 2010 22:28:09 GMT
Server: Apache-Coyote/1.1
Allow: GET, HEAD, POST, TRACE, OPTIONS
Content-Length: 0
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/plain

我在這里做錯了什么?

編輯:如果它可以幫助任何人,我有一個鏈接到提供相同功能的提供商網站上的沙箱...用戶名/密碼為admin / admin

https://demo.service-now.com/incident.do?JSON&sysparm_action=getRecords

嘗試設置contentType

$.ajax({
  beforeSend: function(xhr) {
 xhr.setRequestHeader('Authorization', authinfo);        
},
   url: "https://test.com/incident.do?JSON&sysparm_action=getRecords",

   contentType: "application/json",

   dataType: 'json',
   type: 'GET',
   success: function(a,b,c) {
     alert(a);
   }
 });

更新

這是正確的呼叫方式。 但是,如果您要請求的是您網域之外的頁面,則該頁面將無法正常運行。 為此,您需要一個代理。 這是一個簡單的PHP代理:

<?php
    /* Set the headers for application/json , xml, or whatever */
    echo @file_get_contents(urldecode($_GET['url']));
?>

然后,您的請求將必須轉到此頁面,如下所示:

$.ajax({
  beforeSend: function(xhr) {
 xhr.setRequestHeader('Authorization', authinfo);        
},
   url: "myproxy.php?url=" + escape("https://test.com/incident.do?JSON&sysparm_action=getRecords"),

   contentType: "application/json",

   dataType: 'json',
   type: 'GET',
   success: function(a,b,c) {
     alert(a);
   }
 });

嘗試刪除 "type": "GET" jQuery Ajax請求默認為GET。

也許您遇到了瀏覽器XSS的限制。 網頁是否也通過HTTPS提供服務? 如果包含ajax調用的頁面是HTTP,而AJAX端點是HTTPS,則將違反相同的原始策略。 這里有更多討論。

從jQuery doco:

由於瀏覽器安全性的限制,大多數“ Ajax”請求都受相同的原始策略限制; 該請求無法成功從其他域,子域或協議檢索數據。

根據Wikipedia的說法, http://test.comhttps://test.com是不同的來源,因此違反了相同的來源政策。 也嘗試將頁面設為HTTPS。

$.ajax({
  beforeSend: function(xhr) {
 xhr.setRequestHeader('Authorization', authinfo);        
},
   url: "https://test.com/incident.do?JSON&sysparm_action=getRecords",
   dataType: 'json',
   success: function(a,b,c) {
     alert(a);
   }
 });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM