2009-11-19 4 views
1

MooTool의 JSONP를 사용하여 Drupal node.save를 호출하는 데 문제가 있습니다. 다음은 그 예입니다.Drupal node.save 및 JSONP

콜백 Request.JSONP.request_map.request_1
방법 sessid 123123123123123
노드 { "유형"
node.save : "제목", "블로그": "새로운 제목 여기

내 요청입니다 ","몸 ":"이것은 여기

내 결과입니다} "블로그 몸

HTTP/1.0 500 내부 서버 오류

이전에이 작업이 있었지만 AMFPHP를 사용하여 drupal에 객체를 보낼 수있었습니다. 나는 이것이 Drupal이 객체를 기대한다고 가정하지만, GET이므로 문자열로 변환됩니다. 코드를 해킹하여이 문제를 해결할 수있는 방법이 있습니까?

$('newBlogSubmit').addEvent('click', function() 
{ 
    var node = { 
     type : "blog", 
     title:"New Title", 
     body :"This is the blog body" 
    } 

    var string = JSON.encode(node); 
    string.escapeRegExp() 

    var sessID = _sessID; 

    DrupalService.getInstance().node_save(string, sessID, drupal_handleBlogSubmit); 
}); 

내 드루팔 서비스 JS 코드 : 여기

내 코드입니다

//NODE 
DrupalService.prototype.node_save = function(node, sessid, callback){ 
    var dataObj = { 
     method : "node.save", 
     sessid : sessid, 
     node : node 
    } 
    DrupalService.getInstance().request(dataObj, callback); 
} 


//SEND REQUEST AND CALLBACK FUNCTION 

DrupalService.prototype.request = function(dataObject, callback){ 
    new JsonP('http://myDrupalSite.com/services/json', {data: dataObject,onComplete: callback}).request(); 
} 

내가 드루팔 너무 잘 알고있는 점들을 연결을 시도하지만, 아니에요,하지만 난 모든 I 추측 것 문자열을 객체로 되돌려 야합니다. 내가보고 있어야하는 모든 아이디어 또는 기존 패치가있는 경우?

답변

0

첫 번째 질문은 mootools를 사용하는 이유입니다. Drupal은 jQuery와 함께 제공되며 다른 모듈과 Drupal 코어에서 광범위하게 사용되기 때문입니다.

어쨌든 mootools를 모르므로 도움을 받으실 수 없지만 내부 서버 오류로 끝나기를 요청하신 경우 drupal 코드 또는 js 코드에 문제가 있습니다. 그래서 내가 정확히 무엇을하고 있는지 알았더라도, http://myDrupalSite.com/services/json 콜백의 drupal 코드를 보지 않고서는 문제를 말할 수 없었습니다. 당신이 있는지 확인하려면 무엇을 일반적으로

은 다음과 같습니다

  • 당신은의를 얻을 캐시합니다 드루팔이의 의미로, 데이터를 게시하는 즉, POST 요청을 - 노드 -받는 사람 섬기는 사람.
  • 데이터를 게시 매개 변수로 보내야합니다. 이렇게하면 PHP $ _POST 변수로 끝납니다.
  • 콜백은 데이터의 유효성을 검사하고 적절하게 조치하여 데이터가 손상되지 않았을 때 노드를 만들어야합니다. 스크립트에는 브라우저와 동일한 세션이 있으므로 세션 ID가 필요하지 않습니다.

나는 노드를 저장하는 대신 필드를 변경하는 것과 비슷한 질문에 대해 자세히 대답했지만 많은 작업은 여전히 ​​동일합니다. post을 살펴볼 수 있습니다. 물론 이것이 Mootools가 아니라 jQuery와 관련이 있습니다.