2011-02-15 6 views
0

'page_id'클래스의 WordPress 페이지 드롭 다운 목록이 있습니다. (반복하여 추가 할 수 있습니다. 따라서 라이브 쿼리). change 이벤트에서 Ajax 요청을 보내서 선택한 페이지의 제목, 발췌 및 미리보기 이미지를 가져오고 싶습니다. 지금은 유효한 Json 응답을 얻으려고하고 있습니다. 콜백에서 json_encode를 사용하여 json 객체를 내 .ajax 함수로 반환합니다. 그리고 나서 .jax 성공 함수에서이 json 객체를 유용한 것으로 파싱하려고 시도하지만 매번 오류가 발생합니다. 여분의 0은 문제가있는 경우Wordpress Backend에서 JSON.parse가 오류를 반환합니다.

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

내가 모르는 :

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); 

불을 지르고 콘솔이 응답이 보인다고 :

오류가 JSON.parse에 문제가 될 것으로 보인다 - 메이커,하지만 나는 또한 어떻게 거기에 도착하는지 모르겠다.

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'); 

이 보인다보다 훨씬 더 열심히 것으로 밝혀졌다 :

<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는 콜백은 다음과 같습니다

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

내 JQuery와 함수로 : 크롬은 오류를보고 그것이되어야하는 것처럼. 난 그냥 jquery에서 사용할 수 있도록 PHP 함수에서 데이터를 다시 얻을 필요가있다. 나는 어디로 잘못 가고 있니?

+1

0은 문제입니다. 그것은 JSON 객체의 일부가 아니기 때문에 jQuery는 응답을 구문 분석 할 수 없다. http : //localhost/single/wp-admin/admin-ajax.php에서 0을 JSON 응답으로 출력하는 내용을 추적해야합니다. –

+0

즉, { "제목": "베이컨 제목", "메시지": "베이컨 텍스트"}는 해당 페이지가 반환해야하는 내용입니다. –

답변

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); 

} 

배열 내의 주석을 참조하십시오.

EDIT : 불필요한 테스트이지만 JSON 객체의 끝에 JSON 객체의 끝 부분에 0을 출력하지 않습니다. 따라서 다른 곳 (즉, WordPress 코드)에서 오는 것일 수 있습니다.

EDIT 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 프로세스의 휴식이 필요 :

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/

+0

@jared 답장을 보내 주셔서 감사합니다. 나는 이것이 쉬운 일 이었으면 좋겠다. 여전히 0을 얻었습니다. 편집 - 그냥 다른 의견을 보았습니다 ... 그것은 admin-ajax.php에서 여분의 0을 추적하는 지옥이 될 것입니다! 내일까지 기다려야 할 수도 있습니다. – helgatheviking

+0

@helgatheviking - 0이 오류의 원인입니다 (console.log() 호출로 내 편집 참조). 제목을 편집하고 WordPress에 대한 참조를 추가 할 수 있습니다. 오류가 어디서 왔는지 생각하기 때문입니다. –

+0

@helgatheviking - JSON 객체 텍스트를 출력 한 후 함수의 끝에 exit/die 호출을 추가하는 것을 지정하는 세 번째 편집을 추가했습니다. 이렇게하면 WP 프로세스에서 나중에 발생하는 다른 출력 (예 : 0을 끝에 추가하는 것)을 방지 할 수 있습니다. 덕분에 @@로 –

관련 문제