2012-05-01 33 views
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"); 

}

当我在Firebug看,后是送的,我得到一个200 OK,而答案保持为空。 我也试图与$阿贾克斯和

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

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

亲切的问候

+0

您是想要发布到您的应用程序域还是另一个? –

回答

1

你似乎已经指定一个绝对地址,您的AJAX请求:

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

由于是内置到浏览器中,你无法发送跨域AJAX请求same origin policy限制。有一个couple of workarounds取决于您通过远程域控制的级别。

0

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

0

是由达林提到你应该照顾的起源策略,并让你的Ajax调用应该是相同的域和子域从你的服务中,你有你的JavaScript编写的网页。

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

  • 此外,请确保您转储您的输出,无论您发送如果上一次检查通过,看看你发送。

这应该可以帮助,祝你好运。