2014-06-13 74 views
0

我這樣做jQuery的用ajax後操縱HTML模板

  1. 腓頁citySearchResultListElement.php

    <?php 
    $cityId = $_GET['city_Id']; 
    $cityName = $_GET['city_screen_name']; 
    ?> 
    <li class="result"> 
    <a target="_blank" href="javascript:selectedCityInSearch('<?php echo $cityId; ?>','<?php echo $cityName; ?>');"> 
    <h2><?php echo $cityName; ?></h2></a> 
    </li> 
    
  2. ,這是否Ajax調用

    function getMockupElementHtml(resourceObject, 
    var url = 'pageMockups/' + resourceObject + '.php'; 
    var content = ''; 
    content = $.ajax({ 
         url: url, 
         type: 'GET', 
         data: paramArray, 
         dataType: 'text', 
         crossDomain: true 
        }).done(function (data) { 
              content = data; 
               }) 
    .fail(function (xhr, textStatus, errorThrown) { 
            console.log(xhr.responseText); 
            console.log(textStatus); 
            console.log(errorThrown); 
    
            } 
        ); 
    return content; 
    } 
    
  3. 一個JavaScript

    而我從

    function test(resourceObject,paramArray) 
    { 
    var myObject = getMockupElementHtml(resourceObject,paramArray); 
    console.log(myObject); 
    return myObject; 
    } 
    

使用調試工具,我可以看到myObject不是我所期待的。我期待,我將在其他功能的進一步使用普通的HTML代碼,但我得到這個

Object {readyState: 1, setRequestHeader: function, getAllResponseHeaders: function, getResponseHeader: function, overrideMimeType: function…} 
abort: function (e){return e=e||S,o&&o.abort(e),T(0,e),this} 
always: function(){return i.done(arguments).fail(arguments),this} 
complete: function(){if(a){var t=a.length;(function r(t){v.each(t,function(t,n){var i=v.type(n);i==="function"?(!e.unique||!c.has(n))&&a.push(n):n&&n.length&&i!=="string"&&r(n)})})(arguments),i?o=a.length:n&&(s=t,l(n))}return this} 
done: function(){if(a){var t=a.length;(function r(t){v.each(t,function(t,n){var i=v.type(n);i==="function"?(!e.unique||!c.has(n))&&a.push(n):n&&n.length&&i!=="string"&&r(n)})})(arguments),i?o=a.length:n&&(s=t,l(n))}return this} 
error: function(){if(a){var t=a.length;(function r(t){v.each(t,function(t,n){var i=v.type(n);i==="function"?(!e.unique||!c.has(n))&&a.push(n):n&&n.length&&i!=="string"&&r(n)})})(arguments),i?o=a.length:n&&(s=t,l(n))}return this} 
fail: function(){if(a){var t=a.length;(function r(t){v.each(t,function(t,n){var i=v.type(n);i==="function"?(!e.unique||!c.has(n))&&a.push(n):n&&n.length&&i!=="string"&&r(n)})})(arguments),i?o=a.length:n&&(s=t,l(n))}return this} 
getAllResponseHeaders: function(){return E===2?i:null} 
getResponseHeader: function (e){var n;if(E===2){if(!s){s={};while(n=pn.exec(i))s[n[1].toLowerCase()]=n[2]}n=s[e.toLowerCase()]}return n===t?null:n} 
overrideMimeType: function (e){return E||(c.mimeType=e),this} 
pipe: function(){var e=arguments;return v.Deferred(function(n){v.each(t,function(t,r){var s=r[0],o=e[t];i[r[1]](v.isFunction(o)?function(){var e=o.apply(this,arguments);e&&v.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===i?n:this,[e])}:n[s])}),e=null}).promise()} 
progress: function(){if(a){var t=a.length;(function r(t){v.each(t,function(t,n){var i=v.type(n);i==="function"?(!e.unique||!c.has(n))&&a.push(n):n&&n.length&&i!=="string"&&r(n)})})(arguments),i?o=a.length:n&&(s=t,l(n))}return this} 
promise: function (e){return e!=null?v.extend(e,r):r} 
readyState: 4 
responseText: "<li class="result"><a target="_blank" href="javascript:selectedCityInSearch('1925','Sarakhs (Iran, Islamic Republic Of)');"> 
<h2>Sarakhs (Iran, Islamic Republic Of)</h2></a> 
</li>" 
setRequestHeader: function (e,t){if(!E){var n=e.toLowerCase();e=w[n]=w[n]||e,b[e]=t}return this} 
state: function(){return n} 
status: 200 
statusCode: function (e){if(e){var t;if(E<2)for(t in e)g[t]=[g[t],e[t]];else t=e[x.status],x.always(t)}return this} 
statusText: "OK" 
success: function(){if(a){var t=a.length;(function r(t){v.each(t,function(t,n){var i=v.type(n);i==="function"?(!e.unique||!c.has(n))&&a.push(n):n&&n.length&&i!=="string"&&r(n)})})(arguments),i?o=a.length:n&&(s=t,l(n))}return this} 
then: function(){var e=arguments;return v.Deferred(function(n){v.each(t,function(t,r){var s=r[0],o=e[t];i[r[1]](v.isFunction(o)?function(){var e=o.apply(this,arguments);e&&v.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===i?n:this,[e])}:n[s])}),e=null}).promise()} 

:對象

,我正在尋找的價值是一前一後responseText:

我該如何訪問它?

謝謝

回答

0

你的問題是你在異步代碼中包裝異步代碼,並使用衝突的變量名稱。

var content = ''; 
content = $.ajax({ //content variable is now a jqXHR object returned from $.ajax() 
     url: url, 
     type: 'GET', 
     data: paramArray, 
     dataType: 'text', 
     crossDomain: true 
}).done(function (data) { 
    content = data; //this does happen until AFTER content is returned to calling function 
}) 
.fail(function (xhr, textStatus, errorThrown) { 
        console.log(xhr.responseText); 
        console.log(textStatus); 
        console.log(errorThrown); 

        } 
    ); 
return content;//content is still jqXHR at this point 

爲了解決這個問題,不要使用收益,簡單的做你想要的回調裏面的數據做什麼:

.done(function (data) { 
     console.log(data); 
    }) 
+0

我不能使用jQuery ajax調用將值返回給javascript函數嗎?我的目標是使用getMockupElementHtml作爲「模板提供者」並處理它在單獨的javascript函數中返回的內容... – user3385666

+0

@ user3385666是的,如果您使ajax調用同步,但是您將鎖定瀏覽器直到呼叫完成,這可能是一段時間。異步性是JavaScript的強項之一,不要試圖與它作鬥爭。 – Steve

+0

這就是我正在尋找的。調用是異步的並不重要,因爲它是一個非常簡單的調用,但它必須是動態的,並且通過javascript調用。非常感謝! – user3385666

0

不知道,但,這可能是這個問題:

function getMockupElementHtml(resourceObject, 

你上面沒有關閉「()」括號也似乎你已經錯過了一些爭論也是如此。


這應該是:

function getMockupElementHtml(resourceObject, paramArray){ // <---like this 

另一件事是,你可以刪除這些:

dataType: 'text', 
crossDomain: true 

,並改成這樣:

dataType: 'html', 
+0

林相當肯定這是一個同步的問題 – Steve

+0

是的,大概我在代碼所在的問題中錯誤地輸入了一些內容,無論如何,我的代碼中的函數都是正確的,沒有缺少參數錯誤。 – user3385666