簡體   English   中英

AJAX調用不能與RESTful Web服務一起使用?

[英]AJAX call doesnt work with RESTful web service?

我有一個簡單的restful服務返回一個json。 我想進行ajax調用以獲取所需的數據。 當我嘗試使用firefox的RestClient時沒有問題。 服務返回json,我可以看到休息客戶端上的json。 但是當我使用ajax調用時它會失敗。 控制台顯示200 OK ,但在調用后執行錯誤功能。 我搜索了這個,通常他們說這是一個跨域問題,但我沒有解決這個問題。

這是錯誤函數{"readyState":0,"responseText":"","status":0,"statusText":"error"}的失敗消息{"readyState":0,"responseText":"","status":0,"statusText":"error"}

AJAX調用

$.ajax({
        type:"GET",
        url: "http://localhost:8080/myController/getInfo",
        dataType:"json",
        success: function(data){
            alert(JSON.stringify(data));
        },
        error: function(msg){
            alert("ERROR! \n" + JSON.stringify(msg));
        }
    });

Firefox的控制台消息

Content-Type    application/json
Date    Mon, 18 Feb 2013 11:51:41 GMT
Server  Apache-Coyote/1.1
Transfer-Encoding   chunked

Accept  application/json, text/javascript, */*; q=0.01
Accept-Encoding gzip, deflate
Accept-Language tr-TR,tr;q=0.8,en-US;q=0.5,en;q=0.3
Host    localhost:8080
Origin  null
User-Agent  Mozilla/5.0 (Windows NT 5.1; rv:18.0) Gecko/20100101 Firefox/18.0

通話中返回的數據:

{ "date": "1 hour ago", "photoUrl": "img/movie_detail/celal.jpg", "rating": "three", "title": "Celal ile Ceren" } 

您似乎違反了same origin policy restriction ,阻止您發送跨域AJAX調用。 您已將http://localhost:8080/myController/getInfo用作url,但僅當包含此javascript的HTML頁面是從http://localhost:8080/時才會起作用。 否則,瀏覽器將不允許您執行此AJAX調用。

作為一種可能的解決方法,您可以修改REST服務,以便除了JSON之外它還支持JSONP 然后,您將能夠向它發送GET請求(POST不能與jQuery的JSONP實現一起使用,因為它使用的是<script>標記)。

您可以將CORS用於此目的。

示例代碼:

jQuery.support.cors = true; 

function CrosDom_ajax(url) {
        if (window.XDomainRequest
        && $.browser.msie
        && $.browser.version < 10) {
        xdr = new XDomainRequest();
        if (xdr) {
            xdr.onload = function () {
               alert(xdr.responseText);

            };
            xdr.open("get", url);
            xdr.send();
        }
        }
        else {
            $.ajax({
                url: url,
                success: function (response) {


                },
                error: function (data) {
                }
            });
         }
    }

您還需要在服務器端編寫以下代碼,以允許跨域訪問

Response.AppendHeader("Access-Control-Allow-Origin", "*");

暫無
暫無

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

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