2017-12-24 16 views
0

私はAJAXを使用してフォームデータを取得し、POSTメソッドを使用してWebサービスに送信しています。私は$a = $_POST["accommodation"]を使用して、データベース上のデータを変更するときに情報を取得しようとしています。これは、ajaxメソッドがPOSTまたはGETに設定され、Webサービスが
$a = $_GET["accommodation"]を使用していて、$a = $_POST["accommodation"]を使用していない場合に機能します。AJAX POST要求はGETのように動作しますか?

JS:

function ajaxrequest() 
{ 
var xhr2 = new XMLHttpRequest(); 

xhr2.addEventListener ("load", (e) => 
{ 
    var output = ""; // initialise output to blank text 
    var data = JSON.parse(e.target.responseText); 

    output = data; 

    if(e.target.status==201) 
{ 
    document.getElementById('response').innerHTML = "Successfuly booked!" 
} 
else if(e.target.status=404) 
{ 
    document.getElementById('response').innerHTML = "Sorry fully booked for this date!" 
} 

}); 

var a = document.getElementById("accommodation").value; 
var b = document.getElementById("username").value; 
var c = document.getElementById("accid").value; 
var d = document.getElementById("npeople").value; 
var e = document.getElementById("date").value; 


xhr2.open("POST" , "task2.php?accommodation=" + a + "&username=" + b + "&accid=" + c + "&npeople=" + d + "&date=" + e); 

xhr2.send(); 

} 

PHP

header("Content-type: application/json"); 

$a = $_POST["accommodation"]; 
$b = $_POST["npeople"]; 
$c = $_POST["date"]; 
$d = $_POST["username"]; 
$e = $_POST["accid"]; 

$conn = new PDO ("mysql:host=localhost;dbname=***;", "***", "***"); 

$result = $conn->query("select * from acc_dates where accid=$e and thedate=$c"); 
$row = $result->fetch(); 

if($row["availability"] >= $b) 
{ 

    echo json_encode(header("HTTP/1.1 201 Created")); 

    $result = $conn->query("insert into acc_bookings (accID, thedate, username, npeople) values ($e, $c, '$d', $b)"); 
    $result = $conn->query("update acc_dates set availability = availability + -$b where accid=$e and thedate=$c"); 
} 
else 
{ 
    echo json_encode(header("HTTP/1.1 404 Not Found")); 

} 

は、私は次のことをやってみましたが、まだ作業イマイチ?

xhr2.open("POST" , "task2.php"); 

    xhr2.send("accommodation=" + a + "&username=" + b + "&accid=" + c + 
      "&npeople=" + d + "&date=" + e); 

でも私は使用できません。

+1

これは、実際には「POST」データを送信していないためです。URLのキーと値のペアは常に 'GET'パラメータに変換されます。 'POST'データを送信したい場合は、' send() 'コールにそれを入れる必要があります:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/send –

+0

可能な重複[XMLHttpRequestを使用してPOSTデータを送信する](https://stackoverflow.com/questions/9713058/send-post-data-using-xmlhttprequest) –

+1

彼らが言ったこと。そして、あなたは本当に実際に準備されたステートメントと呼ばれるものをチェックアウトする必要があります(あなたのPHPは安全ではありません) –

答えて

-2

jquery ajax関数を使用するだけではどうですか。
あなたはこれを試すことができ、私はそれがあなたのために働くことを願っています。

var a = $('#accommodation').val(); 
var b = $('#username').val(); 
var c = $('#accid').val(); 
var d = $('#npeople').val(); 
var e = $('#date').val(); 
$.ajax({ 
     url:'task2.php', 
     type:'post', 
     data:{accommodation:a,username:b,accid:c, npeople:d, date:e}, 
     dataType:'json', 
     success:function(response){ 
      console.log(response); 
     } 
    }); 
+0

OPはjQueryを使用していません。そうした場合、 '$ .post()' –

-1

私は個人的にはJQueryを使いたくないです。ネイティブのJavascriptはすべてを処理することができます。あなたの状況については

、あなたはAJAXについてさらに質問をすることができる、これは動作するはず

xhr2.open("POST", "task2.php", true); 
xhr2.setRequestHeader("Content-type","application/x-www-form-urlencoded"); // crucially important! 
xhr2.send("accommodation=" + a + "&username=" + b + "&accid=" + c + 
     "&npeople=" + d + "&date=" + e); 

を記述する必要があります。私はAJAXを操作するための自分のライブラリを書きました。

+0

'text/plain'がありますか?そのデータはプレーンテキストではなく、PHPはそれを決定しません。 – Quentin

+0

おっと、おそらくC++のCGIレスポンスヘッダーと混同しています。私はPHP AJAXでしばらくコードを作成していないことに気をつけてください。 –

1

ここで問題となるのは、PHPの$_POST$_GETは、POSTメソッドとGETメソッドとはあまり関係がありません。

$_POSTには、要求本体のデータが含まれています。 $_GETには、URLのクエリ文字列のデータが含まれています。

URLのクエリ文字列にデータをエンコードすると、$_GETに表示されます。

代わりに体内に入れる必要があります。適切なContent-Typeリクエストヘッダ(application/x-www-form-urlencodedは、フォーム提出で使用されるデフォルトのフォーマットと既に使用されているフォーマットです)を設定して、送信したデータのデコード方法を知ってください。特殊文字も適切にエスケープする必要があります。

xhr2.open("POST" , "task2.php"); 
xhr2.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
var body = "accommodation=" + encodeURIComponent(a) + 
      "&username=" + encodeURIComponent(b) + 
      "&accid=" + encodeURIComponent(c) + 
      "&npeople=" + encodeURIComponent(d) + 
      "&date=" + encodeURIComponent(e); 
xhr2.send(body); 
0

これは、要求本体にデータを入れていないために起こります。あなたはそれをURLに追加しています。私は、これがこのクールな間違い いくつかの独立した制御データを送信するために有用である可能性があるため1+仕事ができる知らなかった Send POST data using XMLHttpRequest

:ここから取ら

var http = new XMLHttpRequest(); 
    var url = "get_data.php"; 
    var params = "lorem=ipsum&name=binny"; 
http.open("POST", url, true); 

//Send the proper header information along with the request 
http.setRequestHeader("Content-type", 
"application/x-www-form-urlencoded"); 

http.onreadystatechange = function() {//Call a function when the state changes. 
    if(http.readyState == 4 && http.status == 200) 
{ 
     alert(http.responseText); 
    } 
} 
http.send(params); 

: あなたはこのようにポストを使用する必要があります

関連する問題