2013-12-19 52 views
0

我必須在這裏錯過簡單的東西。 Firebug顯示的數據與NET標籤(NET選項卡 - >發佈 - >參數)應該完全相同。 PHP函數甚至不會回顯簡單文本。Wordpress插件開發 - AJAX JSON數據發送正確,但PHP響應始終爲0,爲什麼?

的PHP:

add_action('wp_ajax_nopriv_process_json', 'process_json_received'); 
add_action('wp_ajax_process_json', 'process_json_received'); 

function process_json_received(){ 
echo "ANYTHING..."; 
exit; 
} 

的JS/jQuery的(正確發送)

var data = JSON.stringify({ action: 'process_json', value_name: 'value' });//generic sample 

$.ajax({ url: 'http://localhost:12345/site_name/wp-admin/admin-ajax.php', 
       data: {data: data}, 
       type: 'post', 
       dataType: 'json', 
       success: function (response) { 
       alert("Got this from the server: " + response); 
       console.log(response); 
       $('body').append(response); // <-- Append the ajax response to the page body 
      }, 
      complete: function(XMLHttpRequest, text_status) { 

        }, 
       error: function (response) { 
        alert("Error getting php file"); 
      } 
}); 

同樣,也無所謂什麼是PHP函數,響應始終是0。可能是一個「enqueue_scripts」的東西,但ajax請求發送完全按照它應該。 Firebug中的NET選項卡顯示完美的JSON數據,因此問題必須與PHP功能(或正確訪問它)有關。也許WordPress的是以某種方式阻止它?必須是簡單的 - 我希望一個新的眼睛會有所幫助。在此先感謝...

+0

您是否在錯誤函數或「成功」Console.log中顯示零時警報? 。如果你正在進入Success,那麼錯誤肯定是在PHP中的。 –

回答

0

OK,我把它用下面的代碼:

在主PHP插件文件:

echo "<script src='URL PATH TO/ajax_file.js' type='text/javascript'></script>"; 

add_action('wp_ajax_foobar', 'foobar_handler'); 
add_action('wp_ajax_nopriv_foobar', 'foobar_handler'); 
function foobar_handler() { 
    // Handle request then generate response 
    echo "ANYTHING..."; // do stuff here 
    die(); // avoids extra 0 at the end of the response 
} 

在ajax_file.js:(腳本標籤上面提到的)

jQuery(document).ready(function($) { 

    $('#id_to_submit_button').click(function() { 
     var data = { 
     action : 'foobar', 
     Whatever : '1234', 
     } 
     ; 
     // ajaxurl only needed for front - facing public pages, comment out for back end pages 
     var ajaxurl = 'http://SITE_URL/wp-admin/admin-ajax.php'; 
     jQuery.post(ajaxurl, data, function(response) { 
     alert('Got this from the server: ' + response); 
     } 
    ); 
    } 
    ); 
} 
); 

只要我以這種方式包含腳本,它就可以工作,但是放置在PHP函數中時不會有很多來源提示。我嘗試了很多其他應該有效的方法。我一步一步地在WordPress的codex頁面(多次)和其他幾個教程。按照所有建議的做法排隊腳本,註冊腳本。我仍然不明白爲什麼這種方式對我有用,而其他所有「正確」方式都沒有。可能是我的本地服務器環境中的東西。非常感謝那些回答並試圖提供幫助的人。上帝知道我已經在StackOverflow上得到了足夠多的答案,我希望這可以節省一些人花費我測試和排除故障的很長時間...

1

因爲ANYTHING...是不正確的json格式。嘗試echo json_encode(array('msg' => 'test'));這導致的JQuery有一個解析錯誤(不接收錯誤)

+0

我剛纔把它放在這裏的任何部分實際上並不在代碼中,只是作爲一個例子,沒有任何東西會回顯,試過你的方法,不起作用。響應仍然是0 - 無論如何感謝 – TR4NSeND

+0

他沒有得到JavaScript解析錯誤,但響應爲0,這是wordpress的默認情況下,當它沒有得到正確的Ajax調用輸入。 –

+0

Firebug顯示通過NET - > Post - > Parameters正確發送的數據,所以我不認爲問題出在AJAX調用中。更有可能的是PHP或Wordpress預期的缺少的東西。 – TR4NSeND

0

更改JavaScript中的線從

var data = JSON.stringify({ action: 'process_json', value_name: 'value' });//generic sample 

var data = { action: 'process_json', value_name: 'value' }; 

WordPress的期望POST數據,以便它可以讀取$ _POST ['動作],你永遠不應該把它串起來,而只是使用核心JavaScript對象。

瞭解更多關於它:http://codex.wordpress.org/Plugin_API/Action_Reference/wp_ajax_%28action%29

編輯:

也改變data: {data: data},data: data,

:)我錯過最後一次。

+0

當我沒有字符串化螢火蟲顯示數據像這樣insted(名稱:值)對:數據[行動] \t process_json 數據[值名稱]值仍然返回0 – TR4NSeND

+0

另外更改「數據:{數據:數據},」爲「數據:數據,「 –

+0

當我改變,我得到錯誤響應」錯誤獲取PHP文件「。這產生了AJAX調用的問題,而不是PHP的一面。 :( – TR4NSeND

相關問題