0

我正在尝试从我的 asp.net mvc webservice 接收一些 json。ASP.NET:

    public JsonResult getMessagesFromFriend(string email, string friendmail) {
        DataLayer.Repository.Classes.DataLayer dl = DataLayer.Repository.Classes.DataLayer.Instance;
        return Json(dl.getMessagesFromFriend(email, friendmail);
    }

当我使用 http 分析器发送测试帖子消息时,我得到:

    Tue May 01 11:24:59 CEST 2012
    ----------------------------------------
    POST http://xxx.xxx.xxx.xxx/tracy/chat/getMessagesFromFriend?email=linsy&friendmail=djcarre
    HTTP/1.1 200 OK
    Cache-Control: private
    Content-Type: application/json; charset=utf-8
    Server: Microsoft-IIS/7.5
    X-AspNetMvc-Version: 4.0
    X-AspNet-Version: 4.0.30319
    X-Powered-By: ASP.NET
    Date: Tue, 01 May 2012 09:25:04 GMT
    Content-Length: 309

    ----------------------------------------
    ----------------------------------------
    [{"sender":"viagsm","receiver":"djcarre","datetime":"28/04/2012 16:55:33","message":"msg1"},{"sender":"viagsm    ","receiver":"djcarre","datetime":"28/04/2012 16:55:59","message":"msg2"},{"sender":"Philippe C","receiver":"linsy","datetime":"28/04/2012 16:56:10","message":"test3"}]
    ----------------------------------------

所以它返回了我的json。我的 javascript 代码如下所示:

    $.post("http://xxx.xxx.xxx.xxx/tracy/chat/getMessagesFromFriend?email=linsy&friendmail=djcarre", function(data) {
     if (data.length > 0) {
                  for (x in data) {
                      $("#chatarea").html(
                      $("#chatarea").html() +
                      "<p><b>" +
                      data[x].sender + "</b>" + 
                      " (" + data[x].datetime.match(/(\d+:\d+:\d+)/)[1] + ") : " + 
                      data[x].message + "</p>");
                  }
              }
    }, "json");

}

当我查看萤火虫时,帖子已发送,我得到 200 好,但答案保持为空。我也试过 $.ajax 和

    error:function(jqXHR, textStatus, errorThrown){
        alert(errorThrown);
    }

但我只收到一个空警报,所以有一个错误,但我不知道是哪一个以及如何解决它。我希望有人知道如何帮助我。

亲切的问候

4

4 回答 4

1

您似乎为您的 AJAX 请求指定了一个绝对地址:

http://xxx.xxx.xxx.xxx/tracy/chat/getMessagesFromFriend?email=linsy&friendmail=djcarre

由于浏览器内置的相同来源策略限制,您无法发送跨域 AJAX 请求。根据您对远程域的控制级别,有几种解决方法。

于 2012-05-01T10:08:09.123 回答
0

$.post(url, para, successFunction, ErrorFunction);
您忘记将参数放入函数中。所以它不起作用。

于 2012-05-01T10:08:13.107 回答
0

是的,正如 Darin 所提到的,您应该注意原始策略,因此您的 ajax 调用应该位于您为编写 javascript 的页面提供服务的同一域和子域上。

另一种跟踪方法是: - 检查您的 ajax 调用是否到达服务器?为此,您可以更新 db 中的某些表,也可以将包含 POST 数据内容的文件放在本地驱动器上,然后转储为带有时间戳的文件。如果此步骤失败,则意味着您的请求根本没有到达服务器,因此您应该查看它是否是跨站点 ajax 问题,为此您需要通过将文件放在您所在的同一台服务器上来修复它为您的页面提供服务,然后使用 ASP.NET 通过您的服务器调用实际的服务/页面内容。

  • 如果先前的检查通过并查看您发送的内容,还请确保您转储您发送的任何输出。

这应该有帮助,祝你好运。

于 2012-05-01T10:15:29.570 回答
0

经过大量搜索后,我发现了这一点:Ajax json post to Controller across domain, "not allowed by" Access-Control-Allow-Headers 它为我的问题提供了解决方案。

因为我的脚本在手机上运行,​​而 web 服务在远程服务器上,所以我不得不使用 jsonp。谢谢您的帮助 !

于 2012-05-02T08:53:24.930 回答