web-dev-qa-db-ja.com

PHPおよびAjaxを使用してJavascriptに配列を渡す方法は?

この説明がはっきりしないと申し訳ありませんが、私も理解するのが難しいです。 PHP&Ajaxを使用してJavascriptに配列を送信するにはどうすればよいですか?私はAjaxを使用して写真の配列を取得しています。これを追加しようとしています。ページの空の_<div>_に。

JQueryは次のようになります。

_$.ajax({
    url: "<?php echo site_url('demo/getPhotos/'); ?>",
    type: 'POST',
    data: form_data,
    success: function(data) {
        alert(data);
   }
_

PHP関数getPhotosは次のようになります:

_<?php

$photos = array();

foreach ($data as $photo) {
    array_Push($photos,$photo['source']);
    }

// echo json_encode($photos); How should I be returning $photos?
_

単純に_echo $photos;_の場合、データは成功コールバックに送信されますが、使用可能な形式ではないようです。

PHPでvar_dump($photos)を実行すると、結果は次のようになります。

_array(4) {
  [0]=>
  string(14) "some_image.jpg"
  [1]=>
  string(14) "some_image.jpg"
  [2]=>
  string(14) "some_image.jpg"
  [3]=>
  string(14) "some_image.jpg"
}
_

_json_encode_などのさまざまな組み合わせを試してみましたが、実際に推測していて、その背後にある理論がわかりません。このコンテキストでPHPからJavaScriptにデータを渡すための最良の方法は何ですか?

17
Joe W

試してください:

$.ajax({
    url: "<?php echo site_url('demo/getPhotos/'); ?>",
    type: 'POST',
    data: form_data,
    dataType:"json",
    success: function(data) {
        alert(data[0]);
   }

PHP側では、印刷する必要があります。

print json_encode($photos);

コードをより適切にカプセル化するために試すことができるもう1つのことは、JSONの詳細さの例として次のようになります。

print json_encode(array("photolist"=>$photos,"photo_owner"=>"Me!"));

次に、サーバー上でこれらにアクセスします。

data.photolist[0]; //First photo
data.photo_owner;  //The owner of the photo set
25
Richard

配列を作りました$result in PHPおよびリクエストの最後。

 echo json_encode($result); 

jS $.postハンドラー関数:

var obj = $.parseJSON(data);
var v = data.k; 

ここで、kは連想配列のキー値です。

11
bboydev

json_encodeは間違いなく進むべき道です。 jQueryには、JSONの構文解析のサポートも組み込まれています。たとえば、.

$.ajax({
    url: "<?php echo site_url('demo/getPhotos/'); ?>",
    type: 'POST',
    data: form_data,
    dataType: 'json', // will automatically convert array to JavaScript
    success: function(array) {
        alert(array[0]); // alerts first string
    }
});
2
pimvdb

json_encode rulezが必要な場合。

私も最近このクールなことを学びました!方法は次のとおりです。

function jsonResponse($array) {
     header('Content-type: application/json; charset=utf-8;');
     die(json_encode($array));
}

これはオプションです。必要な場合は必要ありませんが、私のMVCシステムでは、このように書く傾向があります...したがって、最初にスクリプトにajaxリクエスト(プロトタイプ)を作成します。前に述べたこの関数jsonResponseを呼び出します...

    new Ajax.Request('URL',
{
    method:'post',
    onSuccess: function(transport){
        res = transport.responseJSON;
        $('actionInformation').update(res.username);
    },
    onFailure: function(){
        alert('Something went wrong...')
    }
});

これはjscriptコードです。res.msgに注意してください。ここで配列を操作できます。ただし、jsonResponse関数を使用して、PHPでJSON形式で応答を送信してください。使いやすいです。たとえば、php関数は次のようになります。

function ajax_get_user() {
     $userName = 'Adrian';
     $active = 1;
     jsonResponse(array('username' => $username, 'active' = $active));
}

後で簡単に取得できます。res.username、res.active。

これでうまくいくと思います!

0
Adrian

json自体を返し、次のようにjsonをループしてjsに配列を作成します。

var array=[];
for(var key in json)
{    
    if(json.hasOwnProperty(key))
      array.Push(json[key]);
}

または、配列が必要な理由があれば、json自体を単純に操作できますか?

json [0]やjson [1]などのようなもの.

0
Baz1nga