[英]Populating A Page with XML and Javascript/Jquery, checking if the url is the same as an xml tag
[英]Checking a Url in Jquery/Javascript
我所需要的只是一個在 URL 響應時返回 true 的方法。 不幸的是,我是 jQuery 的新手,它讓我編寫該方法的嘗試相當令人沮喪。
我已經看過幾個使用 .ajax 的 jQuery 示例,但是代碼一直在我身上失敗。 怎么了?
var urlExists = function(url){
//When I call the function, code is still executing here.
$.ajax({
type: 'HEAD',
url: url,
success: function() {
return true;
},
error: function() {
return false;
}
});
//But not here...
}
這不是 AJAX 的工作方式。 AJAX 本質上是異步的(這實際上是第一個 'A' 所代表的),這意味着您調用一個函數並傳入一個回調,而不是調用一個函數並返回一個值,然后將使用該值調用該回調.
(參見http:\/\/en.wikipedia.org\/wiki\/Continuation_passing_style<\/a> 。)
知道 URL 是否響應后,您想做什么? 如果您打算像這樣使用此方法:
//do stuff
var exists = urlExists(url);
//do more stuff based on the boolean value of exists
urlExists()<\/code>無法返回,因為它需要等待請求。
要么給它一個回調,要么讓它同步(不推薦,因為它會鎖定瀏覽器)。
var urlExists = function(url, callback) {
if ( ! $.isFunction(callback)) {
throw Error('Not a valid callback');
}
$.ajax({
type: 'HEAD',
url: url,
success: $.proxy(callback, this, true),
error: $.proxy(callback, this, false)
});
};
基本上,您的代碼沒有任何問題。 在這里看到它的工作:http: \/\/jsfiddle.net\/PK76X\/<\/a>
我的猜測是您正在使用它來檢查不同域上內容的可用性,這會失敗,因為瀏覽器不允許跨域 ajax 請求。
如果 url 來自與您的頁面相同的域,您可以這樣做。 但是如果它來自不同的域,例如 google.com,那么由於跨域安全性,它將失敗。
一般來說,您可能應該使用 firebug 插件在 Firefox 中運行您的腳本。 它將為您提供解決問題所需的詳細信息。
ajax 和 post 方法是異步的,因此您應該在回調方法中處理結果。
AJAX 基本上是異步的,這就是您所描述的行為的原因。 我使用了以下內容,它是免費的,以同步方式獲得一個簡單的真\/假指示 URL 是否有效:
function isValidURL(url) {
var encodedURL = encodeURIComponent(url);
var isValid = false;
$.ajax({
url: "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D%22" + encodedURL + "%22&format=json",
type: "get",
async: false,
dataType: "json",
success: function(data) {
isValid = data.query.results != null;
},
error: function(){
isValid = false;
}
});
return isValid;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.