お世話になります。
現在、入力フォームの郵便番号検索で入力補助の機能を実装したのですが、下記にコードを記載いたしますが、郵便番号などが入ったCSVと、渡ってきた郵便番号を検索するPHPをAのサーバーに置き、入力フォームのHTML/javascript(Ajaxで郵便番号をPHPにわたす)をBのサーバーに置きたいと考えています。
このような動きにするにはJSONPにしなければいけないと思いますが、どのようにしてよいかわからず困っています。
またクロスドメインをするにあたってのセキュリティ上の懸念事項も合わせてご教授いただければ幸いです。
別件ですがpost.phpの中のコメントアウトしてある部分の「Ajax以外からのアクセスを遮断」なのですが、ここを読ませるとうまく動作しないのですが原因がわかりません。合わせてご教授いただければ幸いです。
どうぞ宜しくお願い致します。
post.html
1<!DOCTYPE html> 2<html> 3<head> 4<title>郵便番号で住所入力補助</title> 5<meta charset="utf-8"> 6<script src="js/jquery-1.11.3.min.js"></script> 7<script src="js/post.js"></script> 8<script type="text/javascript"> 9$(function(){ 10 $('#search').click( 11 function(){ 12 $.ajax({ 13 beforeSend : function(xhr) { 14 xhr.overrideMimeType("text/plain; charset=shift_jis"); 15 }, 16 type: 'get', 17 url: "post.php", 18 data: { zipcode: $('#zip').val() }, 19 }).done(function(data){ 20 if(data == ""){ 21 alert('該当する住所が見つかりませんでした。'); 22 } else { 23 $("#address").val(data); 24 } 25 }).fail(function(XMLHttpRequest, textStatus, errorThrown){ 26 alert(errorThrown); 27 }); 28 } 29 ); 30});</script> 31</head> 32<body> 33<form> 34 <p>郵便番号:<input type="text" name="zipcode" id="zip" size="8" value=""> 35 <input type="button" id="search" value="郵便番号で検索"></p> 36 <p>住所:<input size="50" type="text" name="address" id="address" value=""></p> 37</form> 38</body> 39</html>
post.php
1<?php 2require_once 'phpmylib/h.php'; 3 4$zipcode = $_GET['zipcode']; 5 6$dir = __DIR__ . '/zipcode'; 7 8/* 9// Ajax以外からのアクセスを遮断 10if(! isset($_SERVER['HTTP_X_REQUESTED_WITH']) || $_SERVER['HTTP_X_REQUESTED_WITH'] !== 'xmlhttprequest'){ 11 die("不正な呼び出しです"); 12} 13*/ 14 15$zipcode = mb_convert_kana($zipcode, 'a', 'utf-8'); 16$zipcode = str_replace(array('-','ー'),'', $zipcode); 17 18$result = array(); 19 20$file = $dir . DIRECTORY_SEPARATOR . substr($zipcode, 0, 1) . '.csv'; 21if(file_exists($file)){ 22 $spl = new SplFileObject($file); 23 while (!$spl->eof()) { 24 $columns = $spl->fgetcsv(); 25 if(isset($columns[0]) && $columns[0] == $zipcode){ 26 $result = array($columns[1], $columns[2], $columns[3]); 27 break; 28 } 29 } 30} 31 32if(!empty($result)){ 33 echo $result[0] . $result[1] . $result[2]; 34} 35 36header('Content-type: application/javascript; charset=utf-8'); 37 38
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/02 07:37
2015/12/02 08:04
2015/12/02 12:06
2015/12/02 12:41
2015/12/03 03:25
2015/12/03 13:23