2017-05-06 1 views
1

私はPHPに$ http angularjsリクエストを送信しようとしていますが、それはsuccessCallbackをトリガーします(それは私のリクエストが成功したことを意味するのですか?)しかし、データベースをチェックしても何も起こりませんでした。私はここに何かがないことを知っている。助けてください。 (checkPollCodeIfAvail関数を呼び出し)

コントローラ

pollFactory.checkPollCodeIfAvail('qwe123').then(function successCallback(response){ 
    console.log('success'); 
}, function errorCallback(response){ 
    console.log('fail'); 
}); 

工場:

factory.checkPollCodeIfAvail = function(x){ 
    code = x; 
    return $http({ 
     method: 'POST', 
     data: { 
      'action' : 'checkPollCode', 
      'pollCode' : code 
     }, 
     url: 'http://localhost/poll/api.php' 
    }); 
}; 

return factory; 

api.php

if(empty($_POST['action'])){ 
    return; 
} 

if(($_POST['action']) == "checkPollCode"){ 
    $checkPollCode = $_POST['pollCode']; 
} 

switch ($_POST['action']) { 
    case 'checkPollCode': 
     $sql = "DELETE FROM polls WHERE pollCode = :pollcode"; 
     $stmt = $db_con->prepare($sql); 
     $stmt->bindParam(":pollcode", $checkPollCode); 
     $stmt->execute(); 
     if($stmt->rowCount() > 0){ 
      echo "success"; 
     }else{ 
      echo "error"; 
     } 
     break; 
} 

私を助けることができる誰かに感謝します。

+1

あなたの方法は 'GET'ですが、PHPでは' POST'です – Akashii

+0

応答に感謝しますが、私は 'POST'に変更しようとしましたが、それでも動作しません。 –

+0

PHPでスイッチケースを使う理由直接削除してください。 – Akashii

答えて

1

はこの

を追加してみてください
return $http({ 
     method: 'POST', 
     data: { 
      'action' : 'checkPollCode', 
      'pollCode' : code 
     }, 
     url: 'http://localhost/poll/api.php' 
     transformRequest:function(obj) { 
       var str=[]; 
      for(var p in obj){ 
    str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])) 
           } 
           return str.join("&"); 
          }, 
       headers:{'Content-Type':'application/x-www-form-urlencoded'} 
    }).then(function(response){ 
    console.log('success'); 
} 

Defaut angleの型ヘッダーはapplication/jsonです。ヘッダーを変更しない場合は、PHPで入力をデコードする必要があります。私はPHPに慣れていないので、私はform-urlencodedに変更します。

アプリケーション/ x-www-form-urlencodedの場合、サーバーに送信されるHTTPメッセージの本文は基本的に1つの巨大なクエリ文字列です。名前と値のペアはアンパサンド(&)で区切られ、等号(=)で値から。この例は次のようになります。

MyVariableOne=ValueOne&MyVariableTwo=ValueTwo 

そして、このコード

transformRequest:function(obj) { 
        var str=[]; 
       for(var p in obj){ 
     str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])) 
            } 
            return str.join("&"); 
           } 

前のデータかかわらず、あなたループ、サーバーにデータを送信し、x-www-form-urlencodedにそれを変換します。

+0

これはうまくいきましたが、私はangularjsの初心者です。私はこのコードを実際に理解していないので、なぜこれを行う必要がありますか?ここで何が起こっているのか説明できますか? –

+0

@ CityDove私は答えを編集し、説明しようとしました。私の英語は良くないので、私は明確に説明することが難しいです – Akashii

+0

@ThanTung私は参照してください。ありがとうございました!私は別の質問があります。 '.then(function(response)'の '応答'はPHPの "成功"をエコーし​​ていますか?) –

0

は、HTTP

でいくつかのPBMを持っていることは、このコードを試してみてください:

var fd = new FormData(); 
fd.append('action', "checkPollCode"); 
fd.append('pollCode', code); 

$http.post("http://localhost/poll/api.php", fd, { 
transformRequest: angular.identity, 
headers: {'Content-Type': undefined} 
}).success(function(data, status, headers, conf) { 
    //Evrytheng OK 
}). 
error(function(data, status, headers, config) { 
    alert("You have some error"); 
}); 

があなたのコントローラで$のHttpを追加することを忘れないでください:角度で

app.controller('YourController', ['$scope', '$http',function($scope, $http){... 
関連する問題