带ServiceStack的AJAX JSON

时间:2014-10-29 02:24:36

标签: ajax json servicestack

我花了超过10个小时试图解决这个问题并查看其他人的类似例子,但遗憾的是我还没有找到我的问题所在。

我有一个ServiceStack Web服务设置:

http://example.com/v1/getuser?code=abcd&lastname=doe&format=json

如果我通过浏览器运行上述内容,我将获得以下内容:

[{"nameresult":"joe"}]

我试图通过以下方式进行ajax调用来获取此信息:

   var code = $("#code_field").val();
   var lastname = $("#lastname_field").val();

   $.ajax({ 
     url: "http://example.com/v1/getuser",
     type: "POST",
     data: JSON.stringify({
       code: code,
       lastname: lastname,
       format: 'json'
     }),
     contentType: "application/json; charset=utf-8",
     success: function (data) {
     var returned_data = data;
       alert('returned_data=' + returned_data);
     },
     error: function (xhRequest, ErrorText, thrownError) {
       console.log('xhRequest: ' + xhRequest + "\n");
       console.log('ErrorText: ' + ErrorText + "\n");
       console.log('thrownError: ' + thrownError + "\n");
     }
   });

当我运行上述内容时,我得到以下内容:

returned_data=[object Object]

有谁知道我怎么能得到json结果,nameresult = joe?我假设[object Object]包含[{" nameresult":" joe"}]但我不完全确定,因为我看不到对象内部:(。非常感谢。

最新更新 - 问题解决了!

我想出了我遇到的问题。它与ServiceStack有关,而与Ajax调用无关。我的问题如下,我希望有一天可能会帮助别人可能面临同样的问题。

1.-我需要在ServiceStack上启用CORS支持,以便允许从Ajax发布参数:

File: AppHost.cs     
//Permit modern browsers (e.g. Firefox) to allow sending of any REST HTTP Method
        base.SetConfig(new EndpointHostConfig
        {
            GlobalResponseHeaders = {
                { "Access-Control-Allow-Origin", "*" },
                { "Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS" },
                { "Access-Control-Allow-Headers", "Content-Type" },
            },
        });

        Plugins.Add(new CorsFeature());
        this.RequestFilters.Add((httpReq, httpRes, requestDto) =>
        {
            //Handles Request and closes Responses after emitting global HTTP Headers
            if (httpReq.HttpMethod == "OPTIONS")
                httpRes.EndServiceStackRequest();  //httpExtensions method
            //  =>after  v.3.9.60, => httpRes.EndRequestWithNoContent(); 
        });

2.-我的getuser方法是在GET而不是POST。我把它移到了POST并解决了问题。

Moved getuser from here: public object Get(...) into here public object Post(...)

感谢所有帮助我解决这个问题。

1 个答案:

答案 0 :(得分:0)

使用console.log自行输出returned_data:

console.log(returned_data);

这将显示JSON对象:

{"nameresult":"joe"}

您的原始警报将字符串“returned_data =”与JSON对象连接在一起,因此浏览器会将对象转换为占位符字符串“[object Object]”。

我经常将我的标签放在一个日志中,而对象放在另一个日志中:

console.log('returned_data:');
console.log(returned_data);