PHP追加字符串并返回
我在PHP中有一个函数,它获取JSON输出并返回它。我要做的是返回StdClass对象,它周围有一些字符串。因此,为了清楚起见,我需要将$json包装在“json_CALLBACK()”中。因为不可能在它周围附加字符串,所以我正在寻找另一种方法来实现我要做的事情 注意:“JSON_CALLBACK()”不是函数,它只是一个字符串 这是我的密码:PHP追加字符串并返回,php,json,Php,Json,我在PHP中有一个函数,它获取JSON输出并返回它。我要做的是返回StdClass对象,它周围有一些字符串。因此,为了清楚起见,我需要将$json包装在“json_CALLBACK()”中。因为不可能在它周围附加字符串,所以我正在寻找另一种方法来实现我要做的事情 注意:“JSON_CALLBACK()”不是函数,它只是一个字符串 这是我的密码: public function showOutput() { try { $oauth = new OAuth($co
public function showOutput() {
try {
$oauth = new OAuth($conskey,$conssec);
$oauth->fetch($api_base . '/uItems');
$json = json_decode($oauth->getLastResponse());
//return ($json);
}
catch(OAuthException $E) {
return($E);
}
echo "JSON_CALLBACK(";
return($json);
echo ")"; //wont do anything since return is already called so how can i append this with return?
}
Return将是函数中的最后一行
echo "JSON_CALLBACK(";
return($json);// control will return back.
echo ")";// this will not work
return
之后的任何行都不会执行
所以
有一件事我不明白,你的流量根本不会到达这条线
您可能在try
和catch
中返回了
echo "JSON_CALLBACK(" . $json . ")";
return $json;
下面是您的代码修复注释,以帮助理解更改
public function showOutput() {
try {
$oauth = new OAuth($conskey,$conssec);
$oauth->fetch($api_base . '/uItems');
//don't decode since it is already json
//$json = json_decode($oauth->getLastResponse());
//don't return here, you will never reach the bottom of the code
//return ($json);
//get the json string instead
$json = $oauth->getLastResponse();
}
catch(OAuthException $E) {
//you can leave this return in here just in case there is a problem
//with oauth. This will stop the function if there was an error.
return($E);
}
//since this wasn't decoded, it is a string of json.
return "JSON_CALLBACK({$json})";
}
echo
打印到屏幕上,而return
只返回一个值
在文本中没有任何包含return的点。这没有道理
如果您执行以下操作:
echo 'JSON_CALLBACK()';
return $json;
若最后一行不知何故也被执行了,那个么它将产生和程序相同的效果,因为return不会打印任何内容
如果您只想打印,请在调用函数中打印。调用
返回
结束函数。返回后,在该函数内不会发生任何事情。因此,是否要将对象返回给调用函数,或将字符串输出到浏览器?你不能同时做这两件事——请澄清你想做什么——我知道这一点。我把我的问题编辑得更清楚了。如何添加括号?为什么要“返回$json”?调用者如何使用返回的值?你把echo和return搞混了我猜你也有三个return。您的函数永远不会到达您试图使用JSON\u CALLBACK()
包装的代码,因为您会返回try和catch。因此,如果有错误或没有错误,您应该已经返回了。这是一个注释,不是答案。我知道这一点,您没有回答我的问题。@NiranjanNRaju我已经在try下注释掉了返回内容。我需要对JSON进行解码并围绕JSON_CALLBACK()进行包装。如果JSON不是字符串,我就不能这样做。这会将StdClass转换为字符串。@aqq那么如果希望它是字符串,就不要对它进行JSON解码。返回json字符串。@aqq angular是客户端。不需要解码json服务器端。在客户端,它需要原始json字符串,而不是php解码的对象。@JonathanKuhn它不适合我,因为它会在每个不可读的双引号之前输出json。这就是为什么我需要解码JSON输出。从技术上讲,它不是有效的JSON。但是为了解决这个问题,如果JSON\u CALLBACK
是一个可以运行的js函数,那么您需要执行类似JSON\u CALLBACK(JSON.parse(“{$JSON}”))
的操作。如果在JS中运行,则会将json解析为JS对象,并将结果传递给json\u回调
。
echo 'JSON_CALLBACK()';
return $json;