2010-11-24 6 views
0

MySQLに格納されているパラメータでJavaScript関数を呼び出したいとします。これはすべてonClickイベントで発生しています。ここでJavaScriptのPHPの同期の問題

はjavascriptのコードです:だから

function getFile() { 
    if (window.XMLHttpRequest) {    
    AJAX=new XMLHttpRequest();    
    } else {         
    AJAX=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    if (AJAX) { 
    AJAX.open("POST", "gmap.php", false);        
    AJAX.send("searchField=" + searchField.value); 
    return load(AJAX.responseText); 

    } else { 
    return false; 
    }            
} 

、gmap.phpはjavascriptのロード機能のパラメータをエコーされます。しかし、関数はgmap.phpのMySQLクエリが実行される前に呼び出されるため、パラメータはロードされません。私は同期と非同期AJAXを試してみました。 PHPからjavascript関数を呼び出そうとすると、onClickイベントで呼び出されるため実行されません。これはdiv内にあります。 助けてください、私は今一週間以上これをやっています。私はすべてを試しました。ここで

は、MySQLのクエリとPHPのコードです:

<?php 
header('Content-Type: text/html; charset=UTF-8'); 
mb_internal_encoding('UTF-8'); 
$a = $_POST['searchField']; 
$dbhost = "localhost"; 
$dbuser = "*******"; 
$dbpass = "*******"; 
$dbname = "citydb"; 



    //connect sql 
mysql_connect($dbhost, $dbuser, $dbpass); 

    //select db 
mysql_select_db($dbname) or die(mysql_error()); 
    //retrieve data 
//$city=$_GET['city']; 
    //escape user input to help prevent SQL injection 
//$city=mysql_real_escape_string($city); 
    //query 
mysql_query('SET CHARACTER SET utf8'); 
$result=mysql_query("SELECT citystart, cityend FROM cityids WHERE city='$a' "); 
if(!result) { 

    die("Database query failed: " . myql_error()); 
    } 

while($row=mysql_fetch_array($result)) { 


    $lat=$row['citystart']; 
    $lng=$row['cityend']; 


} 


    echo $lat; 
    echo ", "; 
    echo $lng; 



?> 
+0

は、アラートを使用してみましたDIDテストしている()の代わりに、あなたのAjaxのもののためのロード() –

+0

使用のjQueryの。あなたと将来あなたのコードを扱う人は、AJAXをカプセル化していないライブラリを使わずにAJAXをやっていることを嫌に思うでしょう。 – ThiefMaster

+0

@ThiefMaster:なぜですか? jQueryを使用すると、他のフレームワークと衝突する可能性があります.MooToolsは私の経験上、本当に正当な理由なくJSフレームワークを使用することを嫌う理由と、AJAXを書くことは非常に簡単です。 –

答えて

0

は、検索する変数と一緒にPHPのURLを渡します。

if (AJAX) { 
    var url = "gmap.php?searchField="+ searchField.value; 
    AJAX.open("POST", "url", false);        
    AJAX.send(true); 
    return load(AJAX.responseText); 
} 
+0

同じことが起こると、値を渡すことはありません... – digitale

+0

いいえこれはGETメソッドを使用した場合、gmap.phpが空のPOSTを受け取った場合に機能します。あなたはそれをテストしましたか?どんなブラウザでも動作するのであれば、私はかなり驚くだろう。 –

+0

私は、searchFieldデータをPHPに渡すことを懸念して問題を解決しました。私の問題は、PHPデータをjavascriptに送ることです。私のjavascript関数はMySQLクエリが実行される前に読み込まれます。あなたはそれについて何か考えていますか? – digitale

0

searchField.valueには何も含まれていないと思います。

この

document.getElementById('searchField').value 

searchField.value 

を交換し、検索ボックスにIDとしてsearchFieldを割り当てます。

+0

私はそれを割り当てており、PHPは値を取得しているので、この部分は大丈夫です。しかし、PHPはjavascript関数が実行される前に結果をjavascriptに渡しません。それは問題です。 – digitale

0

このコードをAJAX.openの後とAJAX.sendの前に追加します。

AJAX.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
AJAX.setRequestHeader("Content-length", searchField.value.length); 
AJAX.setRequestHeader("Connection", "close"); 

私は正常にこの

<html> 
<head> 
<script> 

function load(response) { 
    alert(response); 
} 

function getFile() { 
    if (window.XMLHttpRequest) AJAX=new XMLHttpRequest();    
    else AJAX=new ActiveXObject("Microsoft.XMLHTTP"); 

    if (AJAX) { 
    var params = "foo=" + searchField.value; 
    AJAX.open("POST", "http://localhost/test.php", true);        
    AJAX.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    AJAX.setRequestHeader("Content-length", params.length); 
    AJAX.setRequestHeader("Connection", "close"); 
    AJAX.onreadystatechange = function() { 
     var ok; 
     try { ok=AJAX.readyState; } catch(e) { } 
     if(ok==4) load(AJAX.responseText); 
    } 
    AJAX.send(params); 
    }            
} 
</script> 
</head> 
<body> 
    <input type="text" id="searchField"/> 
    <input type="button" onclick="getFile()"/> 
<script> 
    searchField = document.getElementById("searchField"); 
</script> 
</body> 
</html> 
+0

それは悲しいことにも働きません。 MySQLの価値は得られません。while($ row = mysql_fetch_array($ result)){ \t $ lat = $ row ['citystart']; \t $ lng = $ row ['cityend']; } \t echo $ lat; \t echo "、"; \t echo $ lng; $ latと$ lngの値を指定せずに文字列 "、"のみを返します。しかし、MySQLのクエリの前に値を定義すると(例えば、$ lat = 11、$ lng = 10)、それは文字列 "11、10"を返します。だから、問題はJavaScriptをMySQLの値を待つように強制する方法ですか? – digitale

+0

POST varsをスクリプトに渡し、FireFoxとChromeでテストしました。最初のメッセージを編集して、gmap.phpにMySQLスクリプトを貼り付けてください。何か問題があるようです。 –

+0

私の投稿を編集しました。だから、私は私のSQLテーブルに私はGoogleマップ(ロードfuncion)をロードしたい座標を持っている。 google.maps.LatLng()のデータを表すためにSQL値を渡したいと思います。 – digitale