[請益] Ajax傳值到後端問題(已解決)
各位大神好:
這兩天自己用Google Map API 弄一個地址查詢
在做連動式下拉選單時抓不到 Ajax 傳的值
不論用$request, $_GET 或 $_POST 裡頭都是空的
Ajax 用GET 或 POST 傳都一樣
而我自己在後端固定抓某筆資料庫的資料以 JSON 傳送
或是傳一筆假資料以 JSON 傳送又是成功能送回前端使選單連動
但就是改回由收到 Ajax 送的來資料再進資料庫找就會失敗
Ajax 那裡自己用 console.log('city') 確實是有東西的
已經困兩天了,找了好多網站和能問的人也是沒解
不曉得問題出在哪?有點開始懷疑是不是作業系統的編碼問題
----------------
以下是東西的Github
https://github.com/snowtim/damaiquiz_googlemap
Ajax 寫的部分在/resources/views/googlemap.blade.php 裡面
第105行開始
後端寫在/app/Http/Controllers/AddressController.php裡面
citylinkarea 那個 function
將 Ajax 引到 controller 的 route 寫在/routes/web.php
當中Route::post('/citylinkarea, ..........) 那行
作業系統:Ubuntu
後端
語言:PHP
資料庫:MySQL
框架:Laravel
謝謝~
--
php fpm 預設首頁不是有範例?
你要不要直接說是哪一個檔案哪一行code?
忘記了~已補上
※ 編輯: firetim (61.224.206.23 臺灣), 10/22/2020 00:18:40ajax的data先用JSON.stringfy試試看
然後其實有php版跟ajax版比較適合問
你有沒有開csrf token?
有哦~我有開
打錯了 更正JSON.stringify
還是一樣,不管是GET或POST都同樣情形,就是當後端回傳值寫死能正常回傳 只要改回非寫死的話,除了POST我沒辦法用window.location進去看,會跑出 The GET method is not supported for this route. Supported methods: POST. 還有POST非寫死後端傳回來會出現
http://127.0.0.1:8000/citylinkarea500 (Internal Server Error)詢息外 GET就是單純沒變化,然後同樣都會執行寫在Ajax的error情形詢息
※ 編輯: firetim (61.224.206.23 臺灣), 10/22/2020 01:25:33沒寫過laravel 但是我看你取參數的方法跟官網寫的不太
中文的版本停在5,不過當時用過5.6和5.7自己的取法是可以的 然後現在Google Map這個是版本是8的,但下方另一個function還是可以取到
可惜偶4寫C#的,不然我之前專題也是弄串接Google Map API
然後用AJAX取值來動態改畫面呈現
地圖是可以出現,用寫死的假資料也能標出地點 現在卡在查詢地點這裡辦法繼續下去
ajax裡面的type改成method應該就可以我之前也是用type無效
謝謝~還是相同情況QQ~一直卡在這裡 後面的雖然有先寫不過沒辦法跑完全部 根本不知道還會有什麼問題QQ~
※ 編輯: firetim (61.224.206.23 臺灣), 10/22/2020 02:03:05 ※ 編輯: firetim (61.224.206.23 臺灣), 10/22/2020 02:05:12 ※ 編輯: firetim (61.224.206.23 臺灣), 10/22/2020 02:05:42弱弱的想請問一下,如果把 method的 request['city']
換成$request->city這樣呢
也可以哦~自己試過兩種都取得到 只是我的問題還是一樣 在citylinkarea的function裡加了一段$request['city']沒值的回傳詢息 結果都會跑到這一段去
※ 編輯: firetim (61.224.206.23 臺灣), 10/22/2020 02:34:02建議你可以先在發送請求時看request的body
然後直接debug看request接收到了什麼東西
有~request的body都只有關於來源位址的資料 但就是沒Ajax送來的東西 換成看$_GET, $_POST裡頭也OA都是空的
先console一下post到api之前的body看有沒有問題、然
後再看一下傳到laravel的內容? 可能key的大小寫打錯
之類的XD
您是指在data這裡打成data:console.log({City: city})這樣嗎? 我這樣打過console出來是有東西的
因為我看你js的city的c是大寫php卻是用小寫取
data: {city: city} 大小寫?
Body是data: {City: city}
不過php裡面是request[‘city’] 感覺怪怪的
大小寫都有試過~不過還是一樣的情形
※ 編輯: firetim (61.224.206.23 臺灣), 10/22/2020 04:26:27Controller的citylinkarea內
加個if($request->ajax()){}
把你其他原本寫的都寫在這裡面試試
謝謝~不過還是一樣,然後我進去看dd($request->ajax()),是false 會不會是少引入了什麼?
※ 編輯: firetim (61.224.206.23 臺灣), 10/22/2020 08:05:53 ※ 編輯: firetim (61.224.206.23 臺灣), 10/22/2020 08:09:32最好大小寫保持一致。有時這種小坑會害你浪費好多天
謝謝您的提醒~一開始自己是寫一致的 後來一直試沒效才開始大小寫交叉寫想了解是不是有什麼地方是規定一定得大寫自己不知道
CORS? 有開 browser console 看 log 嗎
是指開發人員工具最下面那格嗎?自己知道能看的地方都有開, 不曉得這是不是您說的?
還有一個問題是,你的HTML select option 只有給他te
xt 沒有設定value?
<option value=‘’>{{ $city->city}}<option>
然後下面用.val()
還是就是要拿text而已 那當我沒說XD
謝謝您~這裡的確是自己沒弄好,已經改了
官方文件有寫 $request->input('name')
然後雖然自己寫的專案沒差,但還是建議加個 validator
$request->ajax() 是判斷 request 種類,回 bool 正常
原來是這樣~了解了 官方文件寫的$request->input('name')我當時也有這樣寫過,但狀況一樣 所以當下覺得應該是在東西傳到後端這部分有問題,不過一直當時找不出原因 validator因為這個東西有時間壓力所以想說至少要把功能做出來 等功能OK我再回來補一些接收資料處理的間題,謝謝
用網址帶參數的方式測試$_GET能否取值(query parameter)
用$_POST的話要注意雖然method都是post 但ajax跟html for
m submit出去的request格式不一樣
不過記得laravel已針對這點處理過了
嗯~謝謝,最後有找到問題了~ssccg大的解答
問題解決了嗎,沒用過Laravel,查了一下網路資料
web.php只有Route::post('/citylinkarea'
所以用get method拒絕是合理的吧
另外Laravel官方文件說會以json array的方式回覆
AddressController.php寫死的範例看來是json array
從DB撈的部分原PO自行確認有沒有轉換
應該說data是array回覆的話,content-type會自動是
application/json,不用自己處理,其端才能正確解析
解決了~配合您和ssccg大的解答已弄出來T T 謝謝您
首先你的ajax的request的ontent-type要設成json
$.ajax的dataType是預期response的type (Accept header)
要用contentType: 'application/json'
然後同上面有人提過的,要看實際送出的HTTP request,要看
瀏覽器開發者工具的Network那頁
會發現照你的$.ajax寫法,送出的Content-Type是application
/x-www-form-urlencoded,Body的內容是JSON沒錯,但是在這
種Content-Type下body的格式是key1=value1&key2=value2...
會解析成整個JSON字串是key對應到空白value
是說我不確定你最早的版本長怎樣,以現在的來說其實沒必要
Request用json(不要JSON.stringfy),預設的方式就好
感謝ssccg大~問題確實出在應該用contentType: 'application/json' 我最一開始版本是用dataType: "JSON",不過當時一樣沒有用 我放上去的是弄一段時間休息就傳上去的 目前連動已經可以了~謝謝~ 感謝上面各位的幫忙!!也讓我多學到不少,為了這個弄了好多天QQ~
※ 編輯: firetim (36.235.51.151 臺灣), 10/23/2020 01:55:18 ※ 編輯: firetim (36.235.51.151 臺灣), 10/23/2020 01:58:1684
Re: [討論] API沒資料,回200還是404比較好這篇就不以引述的方式回覆了,因為算是對 後續其他人不論在推文中或是回文中的內容 回覆,另外也是針對我自己在前一篇文章中 沒有提到的部分進行說明。 (1) 敘述問題與回答問題51
[討論] 前端比較痛苦還是後端前端要考慮各種螢幕尺寸, 還有作業系統跟瀏覽器, 排的漂漂亮亮的結果上機長的跟屎一樣, 每天測手機測到厭世, 設計師做一堆天馬行空的視覺,35
[請益] junior php工程師職涯求建議代PO - 因為怕被認出來,請容許我模糊一點資訊 自我介紹: 頂大文科畢業,做了幾年低薪工作,決定轉工程師。25
[問卦] 欸 為什麼我資料都成功丟回前端了 秀不出*** 幹你媽的我找到問題了 另外一個要丟回來的資料裡面 有幾個欄位是NaN *** *** 就算我api response那邊下了 default=str 也是不行 ajax看到NaN就不吃 *** *** error以後還是要寫 媽的這弱智問題卡一上午*** 幹你媽的 javascript到底什麼鬼啦 postman測試ok13
[心得] 為什麼要學 GraphQL?來聊個簡單的議題? 『為什麼要學 GraphQL?』 部落格好讀版: 身為網站工程師,您不能不知道什麼是 GraphQL,這是一個前端跟後端溝通的 API Query 語法,大幅改善了前後端的合作模式,這篇會跟大家介紹為什麼麼要學 GraphQL, 以及整理出三大 GraphQL 優勢,讓大家了解跟傳統 Restful API 有什麼不同。當然不是16
[請益] 如何定義網頁後端104上對於網頁後端工程師的需求普遍是 1. 後端網頁框架 JAVA+springboot / Python+Django 2. 資料庫 MongoDB / SQL / MySQL 3. 雲端服務 Azure / AWS / GCP 很多產品與服務都有提供如網頁的UI介面供操作17
[請益] 後端職涯發展、如何精進/ 背景交代 小弟目前是月領五萬的JS後端(第一份工作未滿半年), 因為工作輕鬆常在想要如何更精進, 目前的規劃是想全面加強資料結構的理解, 一邊持續用c++來刷題,7
Re: [請益] 非本科生轉職請益看到推文說 "有註冊登入功能的作品還會被嫌太簡單嗎?" 原PO的作品我覺得絕對是太簡單 不知道複雜一點的實務需求原PO有沒有能力做出來 更不要說這份作品還是用老師的範例改的 推文有人一看就認出是哪個老師的課程作品 表示改得很少 我一個地名大學資工系 修資料庫必修課的期末專案 都比這複雜6
Re: [請益] 專精前端(或後端)vs全端工程師之前剛好有一份工作是全端,我不知道是否會趨勢化,但全端不一定是一人包前後的案子 事實上那是一份不小的專案,前後端各有數人在開發,甚至客戶 App 也會來串機器 簡單介紹一下那個專案架構 我方開發 web 前端,機器上跑大量 C 的程式,需要把既有 command line 東西視覺化 為了達成雲端操作,所以需要有一個全端來設計 API + SDK1
Re: [討論] 軟體工作真的有需要刷題嗎?還是要看在公司做什麼吧 如果是走前端的感覺用到的機會就很小 畢竟前端鮮少的情況需要處理繁雜的資料 接到的資料很多都是後端處理好的 頂多做個排序但也是直接call funtion就解決了