我花了超过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(...)
感谢所有帮助我解决这个问题。
答案 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);