【问题标题】:$.post not working, i get no answer in firebug$.post 不工作,我在萤火虫中没有得到答案
【发布时间】:2012-05-02 16:53:24
【问题描述】:

我正在尝试从我的 asp.net mvc 网络服务接收一些 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 ok,但答案保持为空。 我也试过 $.ajax 和

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

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

亲切的问候

【问题讨论】:

  • 您是想只发布到您的应用程序域还是其他域?

标签: asp.net-mvc jquery getjson


【解决方案1】:

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

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

由于浏览器内置的 same origin policy 限制,您无法发送跨域 AJAX 请求。 couple of workarounds 取决于您对远程域的控制级别。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      是的,正如 Darin 所提到的,您应该注意原始政策,因此您的 ajax 调用应该在您提供编写 javascript 的页面的同一域和子域中。

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

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多