2014-04-30 57 views
0

這是我的javascript代碼:jQuery的AJAX異步沒有開展相應的工作

function getData(param1,param2) { 
    $.ajaxSetup({async:false}); 
    var request = $.ajax({ 
     url: "http://someurl.com/xyz.php?p1="+param1+"&p2="+param2, 
     type: "POST", 
     async: false, 
     success: function(imageurl){ 
      return imageurl; 
     } 
    }); 
} 

,這裏是在PHP頁面,我調用這個函數:現在

<html> 
<head> 
    <script src="jquery-1.9.1.js"></script> 
     <script src="http://myjsdomain.com/myjs.js"></script> 
     <script> 

      function callMyFunction(box) { 
       alert(box); 
       box.value = "Waiting...."; 
       var data = getData('param1', 'param2'); 
       box.value = data; 
       alert(data); //here I am getting "Undefined" 
      } 
     </script> 
</head> 
<body> 
     <?=$_SERVER["REMOTE_ADDR"]?><br /> 
     <input type="button" onclick="callMyFunction(this)" value="Click Here" /> 
</body> 
</html> 

當我打電話這個getData()函數在我的php頁面,然後返回"Undefined"

當我使用JavaScript代碼提醒數據時,它會提示正確的值,但在PHP頁面中仍會提示"undefined"

這是一個Ajax ASYNC問題,但即使設置它false,我仍然面臨這個問題。

我用螢火蟲調試它,我可以看到URL(從我從哪裏得到的數據使用Ajax)返回正確的值,但它沒有在PHP頁上接收我調用此函數。

任何建議,以使這項工作

+0

因爲您在URL中傳遞數據,所以將'POST'更改爲'GET'。 – Jack

+0

從文檔 - 從jQuery 1.8開始,不贊成使用帶有jqXHR($ .Deferred)的async:false;您必須使用成功/錯誤/完整回調選項,而不是jqXHR對象的相應方法,例如jqXHR.done()或已棄用的jqXHR.success()。 –

+0

@JayBlanchard你可以使用done來提供代碼嗎? – Despicable

回答

4

你必須從功能getData返回結果,返回success功能是不夠的 - 它在diferent範圍

function getData(param1,param2) { 
    var result; 
    var request = $.ajax({ 
    url: "http://someurl.com/xyz.php?p1="+param1+"&p2="+param2, 
    type: "GET", 
    async: false, 
    success: function(imageurl){ 
     result = imageurl; 
    } 
    }); 
    return result; 
} 

或者你可以異步這個做方式:

function changeValue(box, param1, param2) { 
    box.value = "Waiting...."; 
    var request = $.ajax({ 
    url: "http://someurl.com/xyz.php?p1="+param1+"&p2="+param2, 
    type: "GET", 
    async: true, 
    success: function(imageurl){ 
     box.value = imageurl; 
    } 
    }); 
    return result; 
} 
function callMyFunction(box) { 
    alert(box); 
    changeValue(box, 'param1', 'param2') 
} 
+0

您需要更改類型。這是一個'GET',而不是'POST'。 – Styphon

+0

你說得對。我關注的重點。現在修復 – tarmaq

+0

不要使用'async:false'! – Bergi

1

就像接受的答案的替代方法,這裏是如何d o以承諾的異步方式妥善處理。有關更多說明,請參閱重複問題How do I return the response from an asynchronous call?

function getData(param1, param2) { 
    return $.ajax({ 
     url: "http://someurl.com/xyz.php", 
     data: {p1:param1, p2:param2}, 
     type: "GET" // I think this is fine since you didn't send any data 
    }); 
} 
function callMyFunction(box) { 
    alert(box); 
    box.value = "Waiting...."; 
    getData('param1', 'param2').then(function(imageurl) { 
     box.value = imageurl; 
     alert(imageurl); 
    }); 
} 
+0

***承諾***穩定? – Kiquenet

+0

@Kiquenet:當然可以。即使它們在某些瀏覽器中不具備本地可用性,也有許多庫實現它們。即使jQuery帶有延遲(這裏用到了這個答案)。 – Bergi