31
function ajax_test(str1){ 
  var url = "None" 
  jq.ajax({
    type:'post', 
    cache: false, 
    url: 'http://....' + str1, 
    success: function(data, status, xhr){ 
      url=data; 
    }, 
    error: function (xhr, status, e) {  
    }, 
    async: true, 
    dataType: 'json' 
  }); 
  return url 
} 

urlグローバル変数を返される成功ajaxデータに設定するにはどうすればよいですか?

4

2 に答える 2

30

returnJavascriptでは、関数が非同期の結果になることは不可能です。関数は通常、AJAXリクエストが行われる前に戻ります。

リクエストを強制的に同期させることはできますがasync: false、結果を待つ間ブラウザがロックされるため、通常はお勧めできません。

これを回避する標準的な方法は、コールバック関数を使用することです。

function ajax_test(str1, callback){  
   jq.ajax({ 
     //... your options
     success: function(data, status, xhr){  
       callback(data);
     }
   });  
}  

そして、あなたはそれをこのように呼ぶことができます:

ajax_test("str", function(url) {
  //do something with url
});
于 2012-08-11T21:34:54.187 に答える
5

これは、phpからデータを取得し、その値をajaxsuccess関数内のjavascriptグローバル変数に渡すためのサンプルコードです。わたしにはできる!

var retVal = null; 

function ajaxCallBack(retString){
    retVal = retString;
}

function readString(filename){
    $.ajax({  
        type: "POST",  
        url: "readString.php",  
        data: { 'fn': filename },      
        success: function(response){
            ajaxCallBack(response);
        }
    }); 
}

PHPコード(readString.php):

<?php

     $fn  = $_POST['fn'];

     $file = fopen("path/".$fn.".record","r");
     $string = fread($file,filesize("path/".$fn.".record"));
     fclose($file); 

     echo $string;  
?>

ただし、$。ajax()は要求を非同期で送信するため、成功コールバックが実行される前に返される可能性があるため、順次実行されて値を返すことに依存しないでください。したがって、ここでは、コールバック関数のグローバル値にphp応答値を割り当てます。

于 2014-01-15T20:59:02.660 に答える