2011-02-15 89 views
0

我有一個WordPress頁面下拉列表與'page_id'類(他們重複,可以添加..因此livequery)。在更改事件上,我想發送一個ajax請求來提取所選頁面的標題,摘錄和縮略圖。此刻,我只是試圖獲得任何有效的json響應。我在回調中使用json_encode將json對象返回給我的.ajax函數。然後在.ajax成功函數中,我試圖將這個json對象解析成可用的東西,但每次都會得到一個錯誤。在Wordpress後端JSON.parse返回錯誤

錯誤似乎是JSON.parse一個問題:

JSON.parse 
success(response="{"title":"bacon title","message":"bacon text"}0") 
handleError(a=Object { url="http://localhost/single/wp-admin/admin-ajax.php", global=true, more...}, b=XMLHttpRequest { onreadystatechange=[xpconnect wrapped nsIDOMEventListener], readyState=4, more...}, d="success", e="{"title":"bacon title","message":"bacon text"}0") onreadystatechange(m=readystatechange) 
[Break On This Error] var json = JSON.parse(response); 

螢火控制檯說,響應的樣子:

{"title":"bacon title","message":"bacon text"}0 

我不知道,如果額外的0是麻煩製造商,但我也不知道它是如何到達那裏。鉻報告錯誤爲:

Uncaught SyntaxError: Unexpected number 
$.livequery.$.change.$.ajax.success/single/wp-admin/post.php?post=2&action=edit&message=1:917 

這裏是我的jQuery函數:

<script type="text/javascript"> 
//<![CDATA[ 
jQuery(function($) { 

    $('.page_id').livequery(function(){ 

     var loading = $(this).next('img.ajax-loader'); 


     $(this).change(function() { 

      var value = $(this).val(); 
      if (value.length) { 

      $(loading).fadeIn(); 

      var data = { 
      action: 'featured_meta_action', 
      data: value, 
      security: '<?php echo wp_create_nonce('featured-ajax-nonce'); ?>', 
      }; 

      $.ajax({ 
       type: "POST", 
       data: data, 
       url: ajaxurl, 
       complete: function(){ 
        $(loading).fadeOut(); 
        }, 
       success: function(response){ 
        var str = '{ "title": "bar" }'; 
        var json = JSON.parse(response); 

        alert(json['title']); 
       }, 
       error: function(){ 
        alert('fail'); 
       } 
      }); 
      }//end if 
     }); //end change 

    }); //end livequery 


}); //end ready 
/* ]]> */ 
</script>    

我的PHP回調的樣子:

function featured_meta_action_callback(){ 

    $responseVar = array(
        'title'=>'bacon title', 
        'message'=>'bacon text', 
        ); 

    echo json_encode($responseVar); 

} 
add_action('wp_ajax_featured_meta_action', 'featured_meta_action_callback'); 

這已被證明是這樣難度比它看起來像它應該是的。我只需要從PHP函數中獲取數據,這樣我就可以在jQuery中使用它。我哪裏錯了?

+1

0表示問題;它不是JSON對象的一部分,所以jQuery無法解析響應。你需要從http://localhost/single/wp-admin/admin-ajax.php追蹤什麼是輸出0到JSON響應。 – 2011-02-15 00:52:59

+0

換句話說,{「title」:「培根標題」,「消息」:「培根文本」}是該頁面應該返回的內容。 – 2011-02-15 00:53:59

回答

1

我認爲這可能是這樣的:

function featured_meta_action_callback(){ 

    $responseVar = array(
        'title'=>'bacon title', 
        'message'=>'bacon text' // <<< Here you do not need another comma 
        ); 

    echo json_encode($responseVar); 

} 

見陣列內的註釋。

編輯:雖然沒有必要,但在測試中,如果我將它放在那裏,它不會在JSON對象的末尾輸出0。所以很可能它來自其他地方(換句話說,就是WordPress代碼)。

編輯v2:通過Firebug的控制檯運行這些。第二個拋出一個錯誤,但如果你不包含0,它就可以正常工作。

console.log(JSON.parse('{"title":"bacon title","message":"bacon text"}')); 
console.log(JSON.parse('{"title":"bacon title","message":"bacon text"}0')); 

編輯V3:好吧,你顯然需要短路WP過程的其餘部分通過調用exit /死在函數的末尾,就像這樣:

function featured_meta_action_callback(){ 

    $responseVar = array(
        'title'=>'bacon title', 
        'message'=>'bacon text' // <<< Here you do not need another comma 
        ); 

    echo json_encode($responseVar); 

    exit; 
} 

這裏建議:

http://codex.wordpress.org/AJAX_in_Plugins#Ajax_on_the_Administration_Side

在這裏:

http://amiworks.co.in/talk/simplified-ajax-for-wordpress-plugin-developers-using-jquery/