[英]jQuery, $.post() not accessing target url
在下面的代碼中,帶有目標URL test_location_jquery.php
的XMLHTTPRequest,即使觸發了成功函數,也永遠不會訪問此文件。 當單獨運行進行測試時, test_location_jquery.php
已成功按預期返回了JSON對象。 關於在不訪問文件時如何觸發成功功能的任何想法將不勝感激。
<?php
require_once '../meta/php/dbConn.php';
$charlie_query = "";
$charlie_result = "";
$charlie_query = "
SELECT ud.user_id as 'id',
concat(ud.last_name,', ',ud.first_name) as 'name'
FROM `user_detail` AS ud,
`user_type` AS UT
WHERE ud.user_type = ut.id
AND ut.class IN ('charlie')
AND ut.level IN (4)
ORDER BY ut.class;
";
$charlie_result = mysql_query($charlie_query);
if(!(bool)$charlie_result){
throw new Exception();
}
?>
<html>
<head>
<script src="../meta/js/jquery-1.7.2.js"></script>
<!-- <script src="../meta/js/getXML_sir.js"></script> -->
<script>
$(document).ready(function(){
$('#charlie').change(function(){
var charlie_id = $('#charlie option:selected').val();
var DT = "json";
$.post(
'test_location_jquery.php',
{'id':charlie_id,'datatype':DT},
function(data){
alert('Success');
var obj = $.parseJSON(data);
}
);
if(obj != 'undefined'){
var locations = obj.find('location');
console.log(locations);
}else{
alert("failure");
}
})
})
</script>
</head>
<body>
<form>
<label>Charlie: </label><select id="charlie" name="charlie">
<option> </option>
<?php
while($row = mysql_fetch_assoc($charlie_result)){
print("<option value='".$row['id']."'>".$row['name']."</option>");
}
?>
</select>
<label>Location: </label><select id="location" name="location"></select>
</form>
<div></div>
</body>
</html>
<?php
require_once("../meta/php/dbConn.php");
if(!isset($_POST)){
throw new Exception();
}else{
$id = $_POST['id'];
$datatype = $_POST['datatype'];
}
$query = "
SELECT l.id as 'id',
ld.attribute_string as 'name'
FROM `location` AS l,
`location_details` AS ld
WHERE l.id = ld.location_id
AND ld.attribute_label = 'name'
AND l.id = ".$id.";
";
$result = mysql_query($query);
if(!(bool)$result){
throw new Exception();
}else{
switch($datatype){
case 'xml':
break;
case 'json':
$rows = array();
while($r = mysql_fetch_assoc($result)) {
$rows[] = $r;
}
return json_encode($rows);
break;
}
?>
您的.post()
函數是異步的。 這意味着調用.post()
只是開始發布。 緊隨其后的各行在post()
完成之前和調用成功處理程序之前立即執行。
然后,一段時間后,調用成功處理程序。
所有使用發布后響應的代碼都必須在成功處理程序中或從成功處理程序中調用。
因此,您的問題是,您無法引用此代碼所在的成功處理程序中的數據集(在.post()
調用之后)。 您必須將此代碼放入成功處理程序本身。
if(obj != 'undefined'){
var locations = obj.find('location');
console.log(locations);
}else{
alert("failure");
}
因此,這樣做之后,您的代碼將如下所示:
<script>
$(document).ready(function(){
$('#charlie').change(function(){
var charlie_id = $('#charlie option:selected').val();
var DT = "json";
$.post(
'test_location_jquery.php',
{'id':charlie_id,'datatype':DT},
function(data){
alert('Success');
var obj = $.parseJSON(data);
if(obj != 'undefined'){
var locations = obj.find('location');
console.log(locations);
}else{
alert("failure");
}
}
);
})
})
</script>
這應該工作。
$.post(
'test_location_jquery.php',
{'id':charlie_id,'datatype':DT},
function(data){
alert('Success');
var obj = $.parseJSON(data);
if(obj != 'undefined'){
var locations = obj.find('location');
console.log(locations);
}else{
alert("failure");
}
}
);
由於Ajax是異步的,因此在完全調用頁面之前,不存在obj變量。 因此,如果您將函數(數據)放入其中,則只有在完全調用之后,該函數才會繼續執行,並且該變量現在將存在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.