2017-07-03 19 views
2

WordPressで作業しています。私はjQuery関数を純粋なjavascriptに置き換えようとしています。しかし、ajaxコールは私に問題を与えています。純粋なJavascriptでAJAX経由でWordPressオブジェクトを送信する

オリジナルjQueryの

jQuery.ajax({ 
    url: locals.ajax_url, 
    method: 'post', 
    context: this, 
    data: { 
    action: 'get_more_posts', 
    page: page, 
    loop: typeof loop !== 'undefined' ? loop : locals.wp_query 
    } 
}); 

新しいJavaScriptの

var req = new XMLHttpRequest(); 
req.open('POST', locals.ajax_url, true); 
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); 
var l = typeof loop !== 'undefined' ? loop: locals.wp_query; 
var s = 'action=get_more_posts&page=' + page + '&loop=' + encodeURIComponent(JSON.stringify(l)); 
req.send(s); 

jQueryの作品が、JavaScriptがループを処理していない。ここに私の成功jQueryと私の失敗したJavaScriptはあります変数が正しく(変数 "l")。

jQueryのは、このようなものでHTTPリクエストを送信します。

action=get_more_posts&page=2&loop%5Bquery%5D%5Bpage%5D=&loop%5Bquery%5D%5Bpagename%5D=blog&loop%5Bquery_vars%5D%5Bpage%5D=0&loop%5Bquery_vars%5D%5Bpagename%5D=blog&loop%5Bquery_vars%5D%5Berror%5

しかし、JavaScriptのバージョンは、このような何か送信します。だから、jQueryの間、角括弧を送信している

action=get_more_posts&page=2&loop=%7B%22query%22%3A%7B%22page%22%3A%22%22%2C%22pagename%22%3A%22blog%22%7D%2C%22query_vars%22%3A%7B%22page%22%3A0%2C%22pagename%22%3A%22blog%22%2C%22error

をjavascriptは(他のものの中で)括弧をつけて送信しています。

私はこれを修正するいくつかのアプローチがあることを知っていますが、私はそれらのいずれかを動作させることはできません。リクエストヘッダーを "application/json"に変更したいのですが、Wordpressに他の変数(アクション、ページ)を認識させることはできません。さもなければ、私はちょうどループ変数が正しくエンコード/デコードする必要があります。それは場合に役立ちます

<script>var loop = <?= json_encode($loop); ?>;</script> 

はここ(jQueryのバージョンで動作します)PHP関数です:

function get_more_posts() { 
    $args = $_REQUEST['loop']['query']; 
    $args['paged'] = $_REQUEST['page']; 
    $loop = new WP_Query($args); 
    ... 
} 

ない私はPHPで変更を加える必要がある場合は必ずそれは場合に役立ちます。ここ

は、変数のまたはjavascriptを使用することができますが、回答には外部ライブラリは使用できません。また、WordPressで作業していることに注意してください。これ以上の情報が必要な場合はお知らせください。前もって感謝します。

+0

私のajaxは少し錆びますが、クエリ文字列を送信する場合は、リクエストが 'POST'の代わりに 'GET'になるべきではありませんか? –

+0

jqueryが送信する内容を複製しようとしています。 –

+0

jQueryをJS – GNANA

答えて

0

私は要求を正しく解析していませんでした。私はstripslashesを追加する必要があり、オブジェクトの代わりに配列を返すjson_decodeの2番目の引数が欠けていました。

function get_more_posts() { 
    $loop = json_decode(stripslashes($_REQUEST['loop']), true); 
    $args = $loop['query']; 
    $args['paged'] = $_REQUEST['page']; 
    $loop = new WP_Query($args); 
    ... 
} 

他の誰かが同様のことを試みた場合に役立ちます。

関連する問題