0

最後に配列を作成するphpスクリプトを使用してサイトをスクリーンスクレイピングしており、これをjavascript呼び出し元関数に送り返します。以下のコードでは、'print_r' を使用して出力しようとしましたが、まったく結果が得られません (?)。要素 (例: $addresses[1]) をエコーアウトすると、要素が表示されます。

では、php 関数から何も得られないのはなぜでしょうか。また、配列を呼び出し元の js 関数に送り返すにはどうすればよいのでしょうか。

よろしくお願いします!

js:

$.post( 
   "./php/foo.php",
   {
    zipcode: zipcode
   },
  function(data) {
     $('#showData').html(data);
  }
);

php:

$tempAddresses = array();
$addresses = array();

$url = 'http://www.foo.com/addresses/result.jspv?pnr=' . $zipcode;

$html = new simple_html_dom();
$html = file_get_html($url);

foreach($html->find('table tr') as $row) {
    $cell = $row->find('td', 0);

    array_push($tempAddresses, $cell);
}

$tempAddresses = array_unique($tempAddresses);

foreach ($tempAddresses as $address) {
    array_push($addresses, $address);
}

print_r($addresses);
4

2 に答える 2

4

JSONを使用して配列をクライアント側に戻すことができます。これは、既存のコードで行っているのと同じようにAJAXによって送信できます。

PHPを使用するjson_encode()と、この関数はPHP配列をJSON文字列にし、AJAXを使用してクライアントに送り返すことができます。

PHPコード内(それがどのように機能するかを示すためだけに)

json.php

<?php
$addresses['hello'] = NULL;
 $addresses['hello2'] = NULL;
if($_POST['zipcode'] == '123'){ //your POST data is recieved in a common way
  //sample array
  $addresses['hello'] = 'hi';
  $addresses['hello2'] = 'konnichiwa';
}
else{
   $addresses['hello'] = 'who are you?';
   $addresses['hello2'] = 'dare desu ka';
} 
 echo json_encode($addresses);  
?>

次に、クライアントスクリプトで(Jqueryの長いAJAXの方法を使用する方がはるかに優れています)

$.ajax({
     url:'http://localhost/json.php',
     type:'post',
     dataType:'json',
     data:{ 
         zipcode: '123' //sample data to send to the server
     }, 
     //the variable 'data' contains the response that can be manipulated  in JS 
     success:function(data) { 
          console.log(data); //it would show the JSON array in your console
          alert(data.hello); //will alert "hi"
     }
});

参照

http://api.jquery.com/jQuery.ajax/

http://php.net/manual/en/function.json-encode.php

http://json.org/

于 2012-12-29T11:53:57.643 に答える
1

jsは

$.ajax({
     url:'your url',
     type:'post',
     dataType:'json',
     success:function(data) {
      console.log(JSON.stringify(data));
     }
    });

サーバ

$tempAddresses = array();
$addresses = array();

$url = 'http://www.foo.com/addresses/result.jspv?pnr=' . $zipcode;

$html = new simple_html_dom();
$html = file_get_html($url);

foreach($html->find('table tr') as $row) {
    $cell = $row->find('td', 0);

    array_push($tempAddresses, $cell);
}

$tempAddresses = array_unique($tempAddresses);

foreach ($tempAddresses as $address) {
    $arr_res[] =$address;
}
header('content-type:application/json');
echo json_encode($arr_res);
于 2012-12-29T11:52:03.577 に答える