これは少し複雑なので、我慢してください...
ユーザーが地図上にさまざまな場所を追加できる Web ページを作成しています。アプリは Google マップ API を使用します。
追加された場所は ajax 経由で php ページに送信され、そこでセッション変数に保存されます。次に、別の関数が場所を出力して、ユーザーが追加した場所のリストを表示できるようにします。
ユーザーが x 個の場所を追加したら、作成したマップに名前を付け、フォームに入力してから、場所を保存する同じ php ページにフォームを送信します。フォームが送信されると、場所がフォーム情報とともにデータベースに保存されます。
すべて正常に動作しますが、ユーザーは、マップの作成中にマップ上の場所マーカーをクリックして場所を削除することもできます。このクリック イベントは、場所の緯度と lgn を含む ajax 投稿を送信し、この特定の場所は、場所情報を保持するセッションから削除されます。
その場所は、場所が追加されたリストからも消えます。
これも問題なく動作しますが、フォームを保存しようとしても (これも ajax 経由で) 何も起こりません。フォームも ajax 経由で送信されます。
要約すると、フォームを送信する前に場所を削除しなければすべて正常に機能しますが、場所を削除すると機能しません。
もちろん、問題がどこにあるのかについて誰かが正しい方向に私を導くことができれば、サンプルコードを提供します.
編集
OK、2 つの場所を追加したときの応答を次に示します。応答は、Google マップの理由から xml としてエンコードされます。
<markers><marker titel="Test" comment="Test" lat="59.3082270911156" lng="18.060922622680664" name="" type="Parkering" score="3" /><marker titel="test2" comment="test2" lat="59.3082034749666" lng="18.060929998755455" name="" type="Parkering" score="5" /></markers>
ここでマップとフォームを保存すると、問題なく動作します。
これは、マップからマーカーを削除した後の応答です。
<markers><marker titel="Test" comment="Test" lat="59.3082270911156" lng="18.060922622680664" name="" type="Parkering" score="3" /></markers>
私にはそれは問題ないように見えます。
これは、ユーザーがマーカーをクリックした (つまり、マーカーを削除した) ときにトリガーされる関数です。
function close(marker2, lati, lngi, infoWindow, map) {
google.maps.event.addListener(marker2, "click", function() {
marker2.setMap(null);
infoWindow.close(map, marker2);
$.ajax({
type: 'GET',
url: 'test3.php',
data: "lati=" + lati + "&lngi=" + lngi,
success: function(data) {
printResult(data);
$('#send').unbind();
}
});
});
};
これは、セッションからロケーションを削除する関数です:
$val1 = $_GET['lati'];
$val2 = $_GET['lngi'];
$newarray = removeElementWithValue($_SESSION['infomarker'], "lat", "lng", $val1, $val2);
function removeElementWithValue(&$array, $key1, $key2, $value1, $value2){
foreach($array as $subKey => $subArray){
if($subArray[$key1] == $value1) {
if($subArray[$key2] == $value2)
unset($array[$subKey]);
}
}
return $array;
}
js エラーは発生しません。上記のように、delete 関数は正常に機能し、正常な応答が得られます。