iT邦幫忙

0

php mvc內的ajax如何在model內debug?

php
  • 分享至 

  • xImage

您好:請問
1.View一個按鈕 ,按下去 他會去呼叫 control 內的XX()
2.controls 內的XX()-->呼叫 model內的 XX();//model
3.於model 內的XX();去下SQL ,reurn $datax;

因為在model 內有多個判斷,這該如呵去DEBUG呢?
3-1.我用 echo "YY";
-->整個程式 沒反應
chrome 的console
Uncaught SyntaxError: Unexpected token Y in JSON at position 0

3-2.我若用
echo '';
echo 'console.log('. 'ZZ' .')';
echo '';
-->整個程式 沒反應
chrome 的console
Uncaught SyntaxError: Unexpected token < in JSON at position 0

以上都是將語法放在SQL 字串前面

若我放到 XX();//model 的return 前面
可以正常RUN,但 卻沒有log 秀出
是否 因為在VIEW的頁面,無法秀出 model 的log?

那該如何 秀出 XX();//model 的log呢?

甲土豆 iT邦新手 5 級 ‧ 2019-08-21 16:42:53 檢舉
dd()
甲土豆 iT邦新手 5 級 ‧ 2019-08-21 16:44:26 檢舉
原來是XX,來亂的,發的文都沒X子,自己去上網查
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
㊣浩瀚星空㊣
iT邦大神 1 級 ‧ 2019-08-21 14:16:07
最佳解答

說真的,這就是你觀念不夠所造成的結果。
當請的應用格式為json的情況下。
你所輸出的東西當然就得符合json的格式。要不然就會直接出現「JSON at position 0」這樣的錯誤。其錯誤也只是告訴你無法正常的辨別處理。

由於不清楚你的輸出方式為何。如果是採用ajax的方式並要求json的話。
一般要debug有兩種方式可以做

將其test的數據,也同樣放入到要輸出的json。
在其ajax上才跑console.log去輸出接收的值。

不使用json回傳格式。改使用txt或是html等文字輸出方式。這樣就不會有格式不正常的問題。你也可以看到正常的值出現。

還有,這邊要糾正你一個問題。
echo 'console.log('. 'ZZ' .')';是啥鬼啊?
你該不會認為echo一個命令出來給前端輸出就可以跑這樣的命令??
你這樣做並不是運行console.log。而只是單純輸出一個console.log('. 'ZZ' .')字串而已。不要前後端搞不清楚。

看更多先前的回應...收起先前的回應...
noway iT邦研究生 1 級 ‧ 2019-08-21 21:28:47 檢舉

您好:
謝謝各位!
echo 'console.log('. 'ZZ' .')';是啥鬼啊?
這一段,我只是想要在model 的 func xx(){}內

因為現有CODE 有多段 SQL 語法 及 SQL結果 抓出來給PHP 運算,再丟回 另一個SQL

我只是想 用來 查看 他的 結果來DEBUG。

例如第一個 SQL 語法,有3個欄位, 他抓出來程式判斷,再將探段結果丟給 另一個SQL 語法,這一個結果可能得到5個欄位

這樣,適合 每丟一次,就 也同樣放入到要輸出的json 嗎?
不好意思,初學,請見諒!

當你宣告了json格式回傳的情況。其輸出的值就一定得是

{}  
[]

以上這兩種格式。javascript一但接收了這樣的格式,會將其轉換為json物件處理。
但如果你輸出的是

{}
console.log('ZZ')

並不符合其json格式,自然就會爆格式錯誤的訊息出來。
另外告訴你的是,不要認為後端可以輸出javascript命令字串。
其javascript就會去執行。這是錯誤的。
因為除非你的javascript接收端是採用script格式或是利用eval的方式運行。才有可能幫你跑命令。
要不然對它來說,你只是喂給它一個字串。並不會跑語法。

總結來說,你要接收什麼格式,你就得輸出什麼格式給他才行。
沒辦法隨便給的。

noway iT邦研究生 1 級 ‧ 2019-08-23 08:28:31 檢舉

您好:謝謝!
不好意思,再請教

不使用json回傳格式。改使用txt或是html等文字輸出方式。這樣就不會有格式不正常的問題。你也可以看到正常的值出現。

請問在後端,這就不需要用JS 來輸出嗎?
直接用PHP 來輸出嗎?
謝謝!

舜~ iT邦高手 1 級 ‧ 2019-08-23 15:00:19 檢舉

在後端,您可以組合出前端瀏覽器看得懂的語言,讓前端瀏覽器來執行。

比如說,您的echo 'console.log('. 'ZZ' .')';直接輸出會被當成一般的html,前端瀏覽器就只會直接呈現~~
您這句應該是javascript吧,瀏覽器怎麼識別是html/javascript/css呢?是透過標籤

  • < script >...< /script > : 這個標籤告知前端的瀏覽器這是要執行的javascript
  • < style >...< /style > : 這個標籤告知前端的瀏覽器這是宣告樣式
  • 其他標籤: 當成一般html處理

所以您的這句就可以改成
echo '< script >console.log('. 'ZZ' .');< /script >';
讓瀏覽器知道這個script標籤內的內容是要執行的~~

noway iT邦研究生 1 級 ‧ 2019-08-23 15:31:15 檢舉

您好:
謝謝您!
不過我試著在model 內的 fucn()內 程式開始處 加入以下
echo 'console.log('.'ZZ'.');';

就會出現 Uncaught SyntaxError: Unexpected token < in JSON at position 0

是否因為 前一個 的呼叫,是AJAX 所以 這邊就無法 用ECHO方式來做
一定要用 return datax 回傳到前端 來查看?

謝謝!

這其實要看你ajax的date type是什麼。
依照你會出現這個錯誤訊息來看。你因該是指定json的格式。

這樣你要在php中送出的東西就一定得要是json格式的東西。如我上面說的{...}或[...]這一類的東西。
這不管怎麼樣。你送出console.log這樣的字串。當然會讓你的ajax中的json格式無法判別而出現錯誤。

所以你想要能出現訊息。就只能先放進去你要送出的json中。
然後再由前端去顯示。

無論如何,你目前犯的新手問題,就是前後端語言分不清。
想用php語言輸出前端javascript的命令。妄想其能跑javascript。
這算是新手常犯的問題。

noway iT邦研究生 1 級 ‧ 2019-08-24 21:42:20 檢舉

謝謝您!

我要發表回答

立即登入回答