2010-07-13 41 views
1

我正在使用返回JSON數據的Web服務。JSON未加載jQuery.ajax()

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

加載此網址在瀏覽器提示我打開incident.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 /管理員

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

+0

是該網址的Content-Type'application/json'嗎? – 2010-07-13 22:32:17

+0

@meder 是的我試過設置Content-Type,同樣的問題。 – imagineblue 2010-07-13 22:34:31

+0

如果你沒有收到來自web服務的Content-Type:application/json'迴應,那麼即使它回覆了一個json對象也是行不通的。 – Rodrigo 2010-07-13 22:35:06

回答

0

嘗試設置在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); 
    } 
}); 

UPDATE

這是正確的調用方式。但是,如果您向網域外發出請求,則無法使用。爲此,你需要一個代理。 下面是一個簡單的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); 
    } 
}); 
+0

謝謝,我試過了,但我遇到同樣的問題。 – imagineblue 2010-07-13 22:39:29

+0

感謝您的幫助:)問題是這樣的:我正在與服務器在同一個域上進行這些調用,但我的計算機用於連接到域的代理僅爲IE設置!它在Firefox中不起作用,但是在IE中嘗試代碼時它運行良好,因此最終成爲代理問題。 – imagineblue 2010-07-14 21:40:45

0

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

也許你遇到瀏覽器XSS限制。網頁是否也通過HTTPS提供服務?如果包含ajax調用的頁面是HTTP並且AJAX端點是HTTPS,它將違反相同的源策略。更多討論here

從jQuery的DOCO:

由於瀏覽器的安全限制, 大多數 「Ajax」 的請求受到 同源策略;請求 無法成功檢索來自不同域,子域或 協議的數據 。

wikipediahttp://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); 
    } 
}); 
+0

謝謝,但刪除「類型」後:「GET」我仍然有同樣的問題 – imagineblue 2010-07-13 22:46:33