2014-07-21 2 views
0

누군가가 나를 도울 수 있기를 바랍니다. 추가 기능을 추가하기 위해 기존 페이지를 수정하는 GreaseMonkey 스크립트를 작성합니다. 이 일환으로 JQuery를 사용하여 텍스트 상자에 AutoComplete를 추가하려고합니다. 나는 jQuery에 익숙하지 않으므로 어리석은 짓을하고있을 것이다.하지만 너무 오랫동안 이것을보고 있었다.jQuery 자동 완성 -로드 할 데이터를 가져올 수 없습니다.

["Mc"] 

이것은 HTTP 응답이 보이는 것 같다 :

정상적인 요청 본문이 보이는 것 같다

"[{\"__type\":\"\",\"key\":\"62bb420a-5f3a-4a99-97b1-115beaa29b8e\",\"value\":\"McDonalds\",\"html\":null,\"data\":new Data.Dictionary(\"\",[[\"ARGSTCode\",null],[\"APGSTCode\",null],[\"ContactDefaultCurrency\",\"CURR/USD\"],[\"OrganisationTemplate\",\"\"],[\"Discount\",\"\"],[\"ContactDefaultBillDueDate\",\"\"],[\"ContactDefaultBillDueType\",null],[\"ContactDefaultBillDueTypeDisplay\",\"of the following month\"],[\"ContactDefaultInvoiceDueDate\",\"\"],[\"ContactDefaultInvoiceDueType\",null],[\"ContactDefaultInvoiceDueTypeDisplay\",\"of the following month\"],[\"DefaultAPContactAccountType\",\"\"],[\"DefaultARContactAccountType\",\"\"],[\"DefaultARTrackingCategories\",\",,,\"],[\"DefaultAPTrackingCategories\",\",,,\"]])},{\"__type\":\"\",\"key\":\"df8fd73c-1016-4bf7-a448-257c0414af9f\",\"value\":\"Mortgage\",\"html\":null,\"data\":new Data.Dictionary(\"\",[[\"ARGSTCode\",null],[\"APGSTCode\",null],[\"ContactDefaultCurrency\",\"CURR/USD\"],[\"OrganisationTemplate\",\"\"],[\"Discount\",\"\"],[\"ContactDefaultBillDueDate\",\"\"],[\"ContactDefaultBillDueType\",null],[\"ContactDefaultBillDueTypeDisplay\",\"of the following month\"],[\"ContactDefaultInvoiceDueDate\",\"\"],[\"ContactDefaultInvoiceDueType\",null],[\"ContactDefaultInvoiceDueTypeDisplay\",\"of the following month\"],[\"DefaultAPContactAccountType\",\"\"],[\"DefaultARContactAccountType\",\"\"],[\"DefaultARTrackingCategories\",\",,,\"],[\"DefaultAPTrackingCategories\",\",,,\"]])}]";/* 

이는 오토를 추가하는 것처럼 내 코드는 모습입니다 완료

$('.text.ajax') .each(function (index, el) { 
    el.id = el.id + index; 
    var a = $(el); 
    a.autocomplete({ 
    source: function (request, response) { 
     $.ajax({ 
     url: Ajax.url + location.search, 
     type: 'POST', 
     data: '["' + request.term + '"]', 
     dataType: 'json', 
     ContentType: 'text/plain; charset=utf-8', 
     headers: { 
      'X-AjaxPro-Method': 'GetStuff' 
     }, 
     success: function (data) { 
      response($.map(data, function (item) { 
      var text = v.value; 
      return { 
       label: item.value, 
       value: item.key 
      }; 
     })) 
     }, 
     select: function(event, ui) { 
      $(el).val = ui.item.value; 
     } 
    }) 
    } 
}) 
}); 

필드에 입력하는 동안 프록시를 살펴보면 해당 요청은 prope 올바른 위치로 이동하고 적절한 응답을 얻지 만 자동 완성 값을 표시하는 것은 표시되지 않습니다.

내가 뭘 잘못하고 있니?

필드 예 :

<input class='text ajax' id="test_value1" type="text" name="test_value1" maxlength="255"> 
<input class='text ajax' id="test_value2" type="text" name="test_value2" maxlength="255"> 
+0

[JSFiddle] (http://jsfiddle.net) 환경에서 코드를 분리 할 수 ​​있습니까? 이렇게하면 우리가 직접 문제를 쉽게 볼 수있을뿐만 아니라 스스로 해결할 수 있습니다. 귀하의 응용 프로그램이 AJAX 기반이라면 어떻게 가능하지 않을지 이해합니다. –

+0

전에 JSFiddle을 사용한 적이 없습니다. 나는 그것을 살펴보고 할 수있는 것을 보도록하겠습니다. 원격 Ajax 요청을 시뮬레이트 할 수 있다면 뭔가를 조롱 할 수 있어야한다. – Doug

+0

문제의 일부를 발견했을 수도 있습니다. 내 응답이 실제로 유효한 JSON이 아닌 것 같습니다. 응답을 제어하지 않기 때문에 ...이 문제를 해결하는 재미있는 시간을 가질 수 있습니다. – Doug

답변

0

내 질문에 대한 답을 알아 냈어. 내 일은 유효한 JSON 데이터를 반환하지 않는 것으로 나타났습니다. "json"이라는 데이터 유형을 지정 했으므로 parseError가 있었기 때문에 "성공"이 결코 부딪치지 않았 음을 의미합니다.

처음에는 이것을 '스크립트'로 전환 해 보았습니다. 효과가 있었을 것입니다.하지만 문자열 끝에는 닫히지 않은 주석 (/ *)이있는 바보 같은 이유 때문에, 어느 쪽이든 일하십시오.

결과적으로 형식을 "텍스트"로 변경하고 필자가 필요로하는 데이터를 추출하기 위해 자신의 정규식 루틴을 작성했으며 그 밖의 모든 항목은 좋은 결과를 얻었습니다.

관련 문제