私は自分のPHPファイルからJSONデータを取得しようとしていましたが、それは私に苦労しています。これは私のコードです
私のビューのコード:
var productDetails = {'id':ISBNNumber,'qty':finalqty,'price':finalprice,'name':bookTitle};
var base_url = '<?php echo site_url() ?>';
$.ajax({
url: "<?php echo base_url() ?>index.php/user/Add_to_cart/addProductsToCart",
type: 'POST',
data:productDetails,
dataType:'JSON',
});
コントローラーで取得しようとしています:
echo $this->input->post("productDetails");
何も出力しません。
ここに私のヘッダーがあります:
Remote Address:[::1]:80
Request URL:http://localhost/CI/index.php/user/Add_to_cart/addProductsToCart
Request Method:POST
Status Code:200 OK
Request Headersview source
Accept:application/json, text/javascript, */*; q=0.01
Accept-Encoding:gzip, deflate
Accept-Language:en-US,en;q=0.8,fr;q=0.6
Connection:keep-alive
Content-Length:52
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Cookie:ci_session=3E5SPro57IrJJkjs2feMNlmMrTqEXrTNN8UyEfleeothNnHwNxuCZDSx4a7cJZGjj7fyr2KLpj%2BPNJeGRSzSPVmcFHVEdhSk4D47ziOl4eZcTUAZlQrWa3EYIeQJVWxMpiGZS26MEfbSXNmfel9e8TcsJTreZHipvfisrJovbXEAW4Uv%2BwrJRep1KCi1MMaDCVJb9UEinRVcDtYe%2F86jhn7kOj4kraVmVzx%2FsOaO0rAxLyAUtez%2Feaa4zBwpN3Td153sAoIb3WxVHoEj2oKyH5prVHigbIhIBR6XZqjBkM6hjBuoD2OSZ2wgLbp9DEENMoqui4WYyHROBuS2DYiJajblcS0KiFga5k%2FQOODvE7p6n%2BozN5ciDliVjJ4PnJ5PD1GaPEmec5%2FbQSlOHYWZk%2F2Blzw3Nw0EtLL7wKDzzQY%3Df645c36bb3548eb8de915b73f8763d97a47783ce
Host:localhost
Origin:http://localhost
Referer:http://localhost/CI/index.php/user/view_available_books/viewAvailableBooks/5
User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36
X-Requested-With:XMLHttpRequest
**Form Dataview** sourceview URL encoded
id:234
qty:1
price:0.00
name:dasdadsd2q3e!@!@@
開発者ツールで見ることができる私の応答:
Array
(
[id] => 234
[qty] => 1
[price] => 0.00
[name] => dasdadsd2q3e!@!@@
)
しかし、ブラウザでは、出力は何もありません。私はそれを4時間以上解決しようとしていますが、無駄です。
print_r($_POST); // outputs nothing
echo $data = file_get_contents('php://input'); //outputs nothing
echo $id = $this->input->post('productDetails');// outputs nothing
マイビューコード:
<script>
$('#addtoCart').on('click',function(event){
event.preventDefault();
$(this).attr('disabled',"disabled");
finalprice = $.trim($('#price').val());
finalqty = $.trim($('#quantity').val());
var productDetails = JSON.stringify({'id':ISBNNumber,'qty':finalqty,'price':finalprice,'name':bookTitle});
var base_url = '<?php echo site_url() ?>';
// console.log($);
$.ajax({
url: "<?php echo base_url() ?>index.php/user/Add_to_cart/addProductsToCart",
type: 'POST',
contentType: "application/json; charset=utf-8",
data:productDetails,
dataType:'html',
});
});
</script>
コントローラーコード:
function addProductsToCart(){
var_dump(json_decode(file_get_contents("php://input")));
print_r($_POST);
// $data = json_decode($_POST["productDetails"]);
// var_dump($data);
// echo $data = file_get_contents('php://input');
// print_r(json_decode($data));
// $id = $this->input->post('id');
// $qty = $this
}
CIでAjax呼び出しに使用する一般的な方法:
JS:
post_array =
{
"myvar" : "value1",
"myvar2": "value2"
}
$.post(baseUrl + "/AjaxController/my_function", post_array,
function(data)
{
var res = jQuery.parseJSON(data);
alert(res.property);
}
コントローラー:
public function my_function()
{
$myvar = $this->input->post('myvar');
$myvar2 = $this->input->post('myvar2');
//Stuff
echo json_encode($myobject);
}
私はまったく同じ問題を抱えていました。 CodeIgniterはJSONを取得する方法を知りません。 jQuery
ではなく_fetch.js
_を使用しているため、最初にエンコーディングについて考えました。私が何をしていたにせよ、私はノッティングを得ていました。 _$_POST
_は$this->input->post()
と同様に空でした。ここに私が問題を解決した方法があります。
要求を送信します(オブジェクトの小道具として-js libが異なる場合があるため):
_method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
ready: 'ready'
})
_
ノード:タイプ
object
のデータをjson
にエンコードします。 _dataType: 'JSON'
_オプションを設定すると、jQuery
が単独でこれを行います。
CodeIgniter(私の場合は3.1):
_$stream_clean = $this->security->xss_clean($this->input->raw_input_stream);
$request = json_decode($stream_clean);
$ready = $request->ready;
_
注:_
$this->input->raw_input_stream
_をクリーンアップする必要があります。$this->input->post()
を使用していないため、これはCodeIgniterによって自動的に実行されません。
応答に関して:
_$response = json_encode($request);
header('Content-Type: application/json');
echo $response;
_
または、次のこともできます。
_echo $stream_clean;
_
注:
header('Content-Type: application/json')
を設定する必要はありませんが、設定することをお勧めします。request
はすでに_'Accept': 'application/json'
_ヘッダーを設定しています。
したがって、ここでのコツは、_$this->input->raw_input_stream
_を使用して、自分でデータをデコードすることです。
OPは満足しているように見えますが、選ばれた答えは理由と本当の解決策を教えてくれません。 (ところでpost_arrayは配列ではなく、実際にはオブジェクトです)@jimasunの答えには正しいアプローチがあります。物事を明確にし、CI以外のソリューションを追加します。
だから問題の理由は;
CIやPHPではありませんが、アプリケーション/ jsonコンテンツタイプを持つリクエストをサーバーが処理する方法を知りません。したがって、$ _ POSTデータはありません。 PHPはこれとは何の関係もありません。続きを読む: Reading JSON POST using PHP
そして解決策は; application/jsonとしてリクエストを送信しないか、リクエスト本文を処理して投稿データを取得します。
CIの@jimasunの答えはその正確な方法です。
また、このような純粋なPHP=を使用してリクエスト本文を取得することもできます。
$json_request_body = file_get_contents('php://input');
私は同じ問題を抱えていましたが、解決策を見つけました。
これは私が送信しているJsonです[{"name":"JOSE ANGEL", "lastname":"Ramirez"}]
$data = json_decode(file_get_contents('php://input'), true);
echo json_encode($data);
このコードはテストされ、結果は[{"name":"JOSE ANGEL","lastname":"Ramirez"}]
あなた自身の答えしかありません。
print_r($_POST);
戻る:
_Array
(
[id] => 234
[qty] => 1
[price] => 0.00
[name] => dasdadsd2q3e!@!@@
)
_
次に、どのように取得しますか:echo $id = $this->input->post('productDetails');
echo $id = $this->input->post('id');
でidを取得します