2016-12-05 39 views
0

我試圖在我的php控制器中創建一個動態javascript代碼,並且想要將其返回到作爲JSON的角度js的UI,但是我得到的是''作爲迴應。無法獲取包含javascript代碼的json中的php變量的返回值

這是我的PHP代碼,我想返回的JSON:

$user_id = Auth::user()->id; 
$bcamp = Bcamp::where('user_id','=',intval($user_id))->first();//TODO How to clarify which campaign should be showed. 
$bcamp_id = $bcamp->_id; 
$width = $this->request->input('width'); 
$height = $this->request->input('height'); 

$script = "<script type='text/javascript'>"; 
$script .= "!(function(w, d) {"; 
$script .= "'use strict';"; 
$script .= "var ad = { user: '".$user_id."', campaign_id: '".$bcamp_id."', seat_id: '".$seat_id."', width: '".$width."', height: '".$height."', id: 'iranad-' + ~~(Math.random() * 999999 ) },"; 
$script .= "h = d.head || d.getElementsByTagName('head')[ 0 ],"; 
$script .= "s = location.protocol + '//localhost/banneri/iranad/ia.js';"; 
$script .= "if (typeof w.anetworkParams != 'object')"; 
$script .= "w.anetworkParams = {};"; 
$script .= "d.write('<div id=\"' + ad.id + '\" style=\"display: inline-block\"></div>');"; 
$script .= "w.anetworkParams[ ad.id ] = ad;"; 
$script .= "d.write('<script type=\"text/javascript\" src=' + s + ' async></script>');"; 
$script .= "})(this, document);"; 
$script .= "</script>"; 
$response = \Response::json($script, $statusCode); 
return $response; 

我認爲這是逃避的腳本。如何解決這個問題?

FYI:這是Laravel 5.3框架,我參與的工作

+1

如果您使用的是AJAX,您希望'echo'而不是'return' – saravanabawa

+1

如果您沒有使用Ajax,而是在控制器上設置所需的參數並在您的視圖文件上創建JavaScript代碼。 json在數組上工作。 –

回答

1

$script不是JSON。它是一個字符串。

\Response::json應該足夠聰明來處理它並按原樣發送響應,但如果您期望json在客戶端,它將無法解析它。

我不明白爲什麼你需要整個JS代碼由你的控制器返回。它幾乎是靜態的。唯一的動態部分是

{ user: '".$user_id."', campaign_id: '".$bcamp_id."', seat_id: '".$seat_id."', width: '".$width."', height: '".$height."', id: 'iranad-' }", which is valid JSON, unless you mess up with values of the variables, e.g. if it has unescaped quotes. 

基本上你需要返回的是:

return \Response::json(['user' => $user_id, 'campaign_id' => $bcamp_id ... etc ], $statusCode); 

Response將其轉換爲有效的JSON。應在客戶端將響應加載到var ad,並將ad.idMath.random() * 999999相加。