JQuery:如何使用AJAX从ASP.NET WebAPI获取一个简单的字符串?

时间:2014-06-05 09:52:52

标签: jquery asp.net-web-api

这是我服务器中的控制器:

public class ChatController : ApiController
{
    [HttpGet]
    public HttpResponseMessage HelloWorld()
    {
        string result = "<h1>Hello world! Time is: " + DateTime.Now + "</h1>";
        var resp = new HttpResponseMessage(HttpStatusCode.OK);
        resp.Content = new StringContent(result, Encoding.UTF8, "text/plain");
        return resp;
    }
}

这是我的JavaScript代码:

$.ajax({
            type: "GET",
            url: "http://localhost:8080/api/Chat/HelloWorld",
            cache: false,
            contentType: "text/plain",
            success: function (data) {
                alert(data);
            },
            error: function (error) {
                alert('error');
            }
        });

它始终显示错误&#39;。怎么了? 顺便说一句,当我在浏览器的地址栏中复制网址时,浏览器可以显示来自网络API的正确消息。

Firebug

Response is empty

2 个答案:

答案 0 :(得分:1)

终于解决了。这是因为跨域。

解决方案:在WebAPI控制器的响应头中添加“Access-Control-Allow-Origin:*”。

[HttpGet]
    public HttpResponseMessage HelloWorld()
    {
        string result = "Hello world! Time is: " + DateTime.Now + "";
        var resp = new HttpResponseMessage(HttpStatusCode.OK);

        // add this line to allow cross domain
        resp.Headers.Add("Access-Control-Allow-Origin", "*");

        resp.Content = new StringContent(result, Encoding.UTF8, "text/plain");
        return resp;
    }

有关详细信息,请参阅以下帖子:

ajax problem - 200 OK in firebug but red message with no response body

jQuery AJAX cross domain

答案 1 :(得分:0)

尝试使用以下代码在控制台中记录错误:

error: function (xhr, ajaxOptions, thrownError) {
    console.log(xhr.statusText); 
}

如果无法使错误记录生效,请参阅here