【发布时间】:2014-04-03 14:19:10
【问题描述】:
我有一个 Windows 桌面小工具,几个月前我的少数用户突然停止工作。似乎是他们突然不喜欢跨域请求了(尽管这里所有的服务器都在我们的内网上)。所以,我正在重写这个东西,以便它转到一个我有很多控制权的单一后端服务器......并且它对后端的 Ajax 查询设置为使用数据类型:jsonp。同时,gadget查询la Ajax的php脚本调用SOAP服务,取回数据,转为数组,然后使用json_encode转为字符串,并在Gadget上添加一个回调函数的引用/ javascript 方面。
我的问题似乎与 json_encode 有关。如果 SOAP 响应包含单个数据记录,它将作为对象发送。如果 SOAP 响应包含多条记录,它会在其周围加上括号,就像一个数组一样。
例子:
单条记录:
`{
"SmeDetail": {
"SipAddress": "jane.smith@whatever.com",
"SubjectExpert": "Smith,Jane",
"SubjectMatter": "Unix"
}
}`
多条记录:
`{
"SmeDetail": [
{
"SipAddress": "fred.flintstone@whatever.com",
"SubjectExpert": "Flintstone,Fred",
"SubjectMatter": "Bedrock"
},
{
"SipAddress": "barney.rubble@whatever.com",
"SubjectExpert": "Rubble,Barney",
"SubjectMatter": "Bedrock"
},
{
"SipAddress": "wilma.flintstone@whatever.com",
"SubjectExpert": "Flintsone,Wilma",
"SubjectMatter": "Bedrock"
}
]
}`
在 php 脚本中,典型的 SOAP 调用如下所示:
$Service_URL = 'http://server/PROD/OurWcfService/WcfService.svc?wsdl';
$client = new SoapClient($Service_URL);
$res= $client->GetSMEDetails($params)->GetSMEDetailsResult;
然后将 $res 输入到这个例程中:
$json_data = json_encode((array)$res);
echo $_GET['callback_name'].'('.$json_data.');';
这个回声是作为 Ajax 响应反馈的。
我不确定我什至在哪里读到使用这个 json_encode((array)$res) 将 Soap 响应转换为数组,然后是 json 编码字符串。但我想知道我是否在这里做错了什么?我想我需要确保将单个记录作为数组推送。而且我宁愿以“正确的方式”来解决这个问题,而不是对字符串进行某种破解。
有什么想法吗?
【问题讨论】: