我正在尝试使用ajax将ID传递给PHP脚本。使用以下内容时效果很好:
var baseURL = '/W4W/public/';
function voteUp(){
var snippetID = document.getElementById('snippetID').innerHTML;
voteThing('vote_up', snippetID);
}
function voteThing(URL, snippetID){
$.ajax({
type: "POST",
url: URL,
data: {codesnip_id: snippetID},
success: function(data) {
$.ajax({
type: "POST",
url: "updateVotes",
data: {codesnip_id: snippetID}
success: function(data1) {}
});
}
});
}
PHP路由和PHP脚本:
Route::post('codesnippet/{codesnip_id}/vote_up', array('uses' => 'VoteController@votedUp'));
public function votedDown($codesnip_id){
// Some irrelevant code for this issue
}
但是当我改为使用以下路线时:
Route::post('vote_down', array('uses' => 'VoteController@votedDown'));
以及以下javascript:
function voteDown(){
var snippet_ID = document.getElementById('snippetID').innerHTML;
URLS = baseURL + 'vote_down';
voteThing(URLS, snippet_ID);
数据永远不会到达PHP脚本。我收到以下错误: }
{"error":{"type":"ErrorException","message":"Missing argument 1 for VoteController::votedDown()","file":"C:\\wamp\\www\\W4W\\app\\controllers\\VoteController.php","line":69}}
所以我猜我在路由方面做错了,导致数据丢失。但是我想出它可能是什么。
无法找到并具体说明答案 0 :(得分:0)
数据到达你的php脚本,因为你的php脚本抛出异常,
你的vote_down函数需要参数$ codesnip_id
votedDown($codesnip_id)
但是在你的路线中,你没有像你为vote_up那样传递任何论据
因此,从发布的formdata获取$ codesnip_id,因为ajax将数据作为POST数据传递而不是作为url的一部分
votedDown() {
$codesnip_id=$_POST['codesnip_id'];
...
}
答案 1 :(得分:0)
这是您的votedDown
方法
public function votedDown($codesnip_id){
// Some irrelevant code for this issue
}
根据您的错误消息,您没有通过所需的参数,因此请使用url
作为第二个参数传递参数,使用类似的内容:
var snippet_ID = document.getElementById('snippetID').innerHTML;
URLS = baseURL + 'vote_down/' + snippet_ID;
voteThing(URLS);
在这种情况下,路线应为:
Route::post('vote_down/{id}', array('uses' => 'VoteController@votedDown'));
或者,您可以在现在通过时将其传递给POST
但是从方法中移除$codesnip_id
,所以它可能是:
public function votedDown(){
$codesnip_id = Input::get('snippet_ID');
}
在这种情况下,snippet_ID
应该像'snippet_ID=' + snippet_ID
。