2013-10-30 128 views
0

我想從跨域調用ajax調用數據。 這裏是代碼如何從ajax調用獲取數據?

function GetMaxWULen() { 
var x; 
$.ajax({ 
    url : url, 
    method : 'POST', 
    jsonp : "callback", 
    async : false, 
    data : { 
     Function : "GetMaxWULen", 
     Authorization : Base64.encode(login + ":" + token), 
     WuType : $("#ddlWUType").val() 
    }, 
    dataType : 'jsonp', 
    crossDomain : true, 
    error : function(request, status, error) { 
     alert('nie udało sie'); 
     alert(error); 
    } 
}).done(function(result) { 
    console.log('done result'); 
    x = result; 
    console.log(x); 
}); 
console.log('function end'); 
console.log(x);} 

在函數結束時,x變量是未定義的,但在處理完畢事件值是正確的。 任何人都可以幫助我或說出這段代碼有什麼問題嗎?

+0

這是asyncronous,這樣的代碼,最後一行請求加載之前執行的,因此'x'沒有按」還沒有價值。它在'done'事件中起作用,因爲它在執行該函數之前等待請求加載。 –

+0

上面的錯誤:添加'成功:YourfunctionName()',稍後然後'YourfunctionName(響應){警報(響應)}' –

+2

可能重複[如何返回來自AJAX調用的響應?](http:// stackoverflow。 com/questions/14220321/how-to-return-a-a-ajax-call) –

回答

-2

嘗試

$.ajax({ 
    url : url, 
    method : 'POST', 
    jsonp : "callback", 
    async : false, 
    data : { 
     Function : "GetMaxWULen", 
     Authorization : Base64.encode(login + ":" + token), 
     WuType : $("#ddlWUType").val() 
    }, 
    dataType : 'jsonp', 
    crossDomain : true, 
    error : function(request, status, error) { 
     alert('nie udało sie'); 
     alert(error); 
    } 
}).success(function(result) { 
    var datareturned = result.d; 
    console.log('done' + datareturned); 
    x = datareturned; 
    console.log(x); 
}); 
+0

你剛剛把'成功'改成'成功'了嗎? – Archer

+0

不,我沒有......看到成功函數裏面的代碼 –

+0

也許如果你解釋了你做了什麼,那麼人們就不用問了。他真的只需要一個簡單的例子,說明爲什麼這個異步調用不是以同步方式進行的,因爲這顯然是他的問題。 – Archer

3

這是因爲你的AJAX請求是異步完成的。這意味着您的其他代碼不會等待您的響應準備繼續。

如果您需要使用從AJAX返回的函數以外的數據,則可能需要創建一個參數以在響應準備就緒時用作回調。例如:

function yourFunction(callback) { 
    $.ajax({ 
     /* your options here */ 
    }).done(function(result) { 
     /* do something with the result here */ 
     callback(result); // invokes the callback function passed as parameter 
    }); 
} 

然後調用它:

yourFunction(function(result) { 
    console.log('Result: ', result); 
}); 

小提琴:http://jsfiddle.net/9duek/

+0

但是當我按照你的建議調用函數,並將返回結果添加到該調用中時,它仍然不起作用。 – dawid

+0

編輯答案並在jsfiddle上添加了一個工作示例。如果這不起作用,您的代碼的另一部分可能會出現問題。 –

+0

我嘗試像這樣http://jsfiddle.net/g53U9/1/ – dawid