복붙노트

[JQUERY] jQuery를 AJAX를 쿼리에서 내 JSON을 구문 분석 할 것

JQUERY

jQuery를 AJAX를 쿼리에서 내 JSON을 구문 분석 할 것

해결법


  1. 1.서버가 "* / JSON"콘텐츠 형식으로 데이터를 전송되어 있습니까? 그렇지 않을 경우, 그에 따라 응답 헤더를 수정합니다. "응용 프로그램 / JSON"을 전송하면, 예를 들어, 잘 될 것입니다.

    서버가 "* / JSON"콘텐츠 형식으로 데이터를 전송되어 있습니까? 그렇지 않을 경우, 그에 따라 응답 헤더를 수정합니다. "응용 프로그램 / JSON"을 전송하면, 예를 들어, 잘 될 것입니다.


  2. 2.json.org 사양에 따르면, 수익이 잘못되었습니다. 당신이 반환해야하므로 이름은 항상 인용

    json.org 사양에 따르면, 수익이 잘못되었습니다. 당신이 반환해야하므로 이름은 항상 인용

    { "title": "One", "key": "1" }
    

    [ { "title": "One", "key": "1" }, { "title": "Two", "key": "2" } ]
    

    이것은 당신이 그들 중 하나가 지금 작동 말하지만, 그것은 당신이 미래에 또 다른 JSON 파서로 전환해야하는 경우에 정확성을 위해 고정해야하기 때문에, 사용자의 설정에 문제가되지 않을 수 있습니다.


  3. 3.JSON 문자열은 큰 따옴표로 감싸; 작은 따옴표는 유효한 대체하지 않습니다.

    JSON 문자열은 큰 따옴표로 감싸; 작은 따옴표는 유효한 대체하지 않습니다.

    {"who": "Hello World"}
    

    유효하지만이되지 않습니다 ...

    {'who': 'Hello World'}
    

    하지 OP의 문제 동안, 여기에 착륙 다른 사람을 위해 주목할 가치를 생각했다.


  4. 4.귀하의 요청이 잘못된 MIME 타입을 받았기 때문에이 문제는 일반적이다. 자신의 컴퓨터에서 개발하는 경우, 때때로 당신은 당신의 자신의 컴퓨터에있는 "서버"에서 적절한 MIME 유형을 수신하지 않습니다. 나는 브라우저에서 로컬에 저장된 파일을 열어 개발할 때 한 번 ( "/project/test.html C는"예를 들어, URL이었다)이 문제에 달렸다.

    귀하의 요청이 잘못된 MIME 타입을 받았기 때문에이 문제는 일반적이다. 자신의 컴퓨터에서 개발하는 경우, 때때로 당신은 당신의 자신의 컴퓨터에있는 "서버"에서 적절한 MIME 유형을 수신하지 않습니다. 나는 브라우저에서 로컬에 저장된 파일을 열어 개발할 때 한 번 ( "/project/test.html C는"예를 들어, URL이었다)이 문제에 달렸다.

    MIME 타입을 재정의하는 콜백 함수를 추가 할 beforeSend 속성을 사용하십시오. 이것은 당신의 호출 코드에 의해 서버에서 전송 및 수신되는 잘못된 MIME 타입에도 불구하고 JSON 처리에 코드를 속여 것입니다. 일부 예제 코드는 다음과 같습니다.

    적절한 MIME 형식이 질문에 따라 응용 프로그램 / JSON이지만, 나는 (몇 년 전 지금은) 그것을 시도 할 때 해당 응용 프로그램 / JSON이 일을 알고있다. 당신은 아마 첫 번째 응용 프로그램 / JSON을 시도해야합니다.

    var jsonMimeType = "application/json;charset=UTF-8";
    $.ajax({
     type: "GET",
     url: myURL,
     beforeSend: function(x) {
      if(x && x.overrideMimeType) {
       x.overrideMimeType(jsonMimeType);
      }
     },
     dataType: "json",
     success: function(data){
      // do stuff...
     }
    });
    

  5. 5.나는이 문제를했고 비트 I에 사용

    나는이 문제를했고 비트 I에 사용

    eval('('+data+')')
    

    객체에서 반환 된 데이터를 얻을 수 있습니다. 하지만 나중에 '괄호에)없는'오류가 다른 문제를 가지고 있었고, jQuery를이 JSON 구조에 대한 문자열을 평가하는 기능을 특별히 가지고 발견 :

    $.parseJSON(data)
    

    트릭을 할해야합니다. 이 과정의 적절한 형식으로 JSON 문자열을 가지고에 추가됩니다 ..


  6. 6.당신은 JSON 응답을 반향하는 당신의 헤더 * / JSON과 일치하지 않는 경우에 당신은 응답을 구문 분석 jQuery.parseJSON API의 내장 사용할 수 있습니다.

    당신은 JSON 응답을 반향하는 당신의 헤더 * / JSON과 일치하지 않는 경우에 당신은 응답을 구문 분석 jQuery.parseJSON API의 내장 사용할 수 있습니다.

    response = '{"name":"John"}';
    var obj = jQuery.parseJSON(response);
    alert( obj.name === "John" );
    

  7. 7.

    { title: "One", key: "1" }
    

    당신이 생각하지 않습니다. 하는 식으로, 그것은 개체 리터럴,하지만 성명, 그것은이다 :

    {                // new block
        title:       // define a label called 'title' for goto statements
            "One",   // statement: the start of an expression which will be ignored
            key:     // ...er, what? you can't have a goto label in the middle of an expression
                     // ERROR
    

    불행하게도 당신이 그것을 문 또는 식을 제공할지 여부를 지정하는 방법을 제공하지 않습니다 () 평가, 그것은 잘못 생각하는 경향이있다.

    일반적인 솔루션은 eval () 함수로 전송하기 전에 괄호 안에 아무것도 포장하는 참이다. 당신은 당신이 서버에 ... 분명 어떻게 든 돌파되지 않는다는 것을 시도했습니다 말한다. XMLHttpRequest의 응답을 받고 무엇이든 클라이언트 측에 말을 방수해야한다 :

    eval('('+responseText+')');
    

    대신에:

    eval(responseText);
    

    한 응답이 정말 표현하지 않는 문 때문이다. (예. 그것은 여러 세미콜론 또는 개행 구분 조항이 없다.)


  8. 8.이처럼 PHP의 설정 헤더 콘텐츠 형식해야 할 것입니다 :

    이처럼 PHP의 설정 헤더 콘텐츠 형식해야 할 것입니다 :

     <?php
    
     header('Content-type:application/json');
    
     ?>
    

    .... 더 나은 이해를 위해이 비디오를 시청

    참조 : http://www.youtube.com/watch?v=EvFXWqEqh6o


  9. 9.당신이 jQuery를 사용하여 ASP.NET 웹 서비스를 사용하는 경우, 당신은 당신의 Web.config에 포함 된 다음했는지 확인 :

    당신이 jQuery를 사용하여 ASP.NET 웹 서비스를 사용하는 경우, 당신은 당신의 Web.config에 포함 된 다음했는지 확인 :

    <webServices>
        <protocols>
            <add name="HttpGet"/>
            <add name="HttpPost"/>
        </protocols>
    </webServices>
    

  10. 10.파이어 폭스 3.5은 벌금을 근무하고 내 JSON 데이터를 분석하지만, 파이어 폭스 3.0.6은 parseerror을 반환 어디 이와 비슷한 문제가 있었다. 밝혀졌다 그것은 오류가 발생하는 파이어 폭스 3.0.6 야기 된 JSON의 시작에 빈 공간이었다. 빈 공간을 제거하면 고정

    파이어 폭스 3.5은 벌금을 근무하고 내 JSON 데이터를 분석하지만, 파이어 폭스 3.0.6은 parseerror을 반환 어디 이와 비슷한 문제가 있었다. 밝혀졌다 그것은 오류가 발생하는 파이어 폭스 3.0.6 야기 된 JSON의 시작에 빈 공간이었다. 빈 공간을 제거하면 고정


  11. 11.기법 "평가 후면 ()"와 "JSON.parse ()"를 사용 상호 배타적 형식을 지원합니다.

    기법 "평가 후면 ()"와 "JSON.parse ()"를 사용 상호 배타적 형식을 지원합니다.

    "캐릭터 라인 화 ()"기능이 생산 "평가"형식이있다 조심. 아약스를 들어, 당신은 단지 JSON 형식을 사용합니다.

    "평가는"전체 자바 스크립트 언어를 통합하는 동안, JSON은 언어의 작은 부분 집합을 사용합니다. "평가"는 인식해야하는 자바 스크립트 언어의 구조 가운데 "블록 문"(일명, "복합 문은")입니다; 한 쌍 또는 중괄호는 "{}"내부의 문에. 그러나 중괄호는 객체 리터럴의 구문에 사용됩니다. 해석은 코드가 표시되는 환경에 의해 구별된다. 뭔가 당신에게 객체 리터럴처럼 보일 수도 있지만, "평가"는 복합 명령문으로 표시됩니다.

    자바 스크립트 언어에서 객체 리터럴은 할당의 오른쪽에 발생합니다.

    var myObj = { ...some..code..here... };
    

    객체 리터럴은 자신 발생하지 않습니다.

    { ...some..code..here... }   // this looks like a compound statement
    

    다음은 ") (평가"에 실패하는 이유는 2008 년에 부탁 OP의 원래의 질문에, 다시가는, 그는 물었다 :

    { title: "One", key: "1" }
    

    대답은 복합 문처럼 보이는 것입니다. 객체로 변환하려면, 복합 문이 불가능한 상황에 넣어해야합니다. 즉 그것의 주위에 괄호를 넣어 이루어집니다

    ( { title: "One", key: "1" } )    // not a compound statment, so must be object literal
    

    유사한 문이 성공적으로 평가 한 이유 OP는 질문 :

    [ { title: "One", key: "1" }, { title: "Two", key: "2" } ]
    

    같은 대답이 적용됩니다 - 중괄호는 복합 문이 불가능한 상황에 있습니다. 이 배열 컨텍스트 "[...]"이며, 배열은 객체를 포함 할 수 있지만,이 문을 포함 할 수 없습니다.

    "() 평가 '와 달리, JSON은 매우 그 기능에 제한된다. 제한은 의도적이다. JSON의 디자이너는 할당의 오른쪽에 나타날 수있는 유일한 구문을 사용하여 자바 스크립트의 최소한의 부분 집합을 구성. 그래서 당신은 제대로 JSON에서 구문 분석하는 코드가 있다면 ...

    var myVar = JSON.parse("...some...code...here...");
    

    ... 그게 법적으로 다음과 같이 할당의 오른쪽에 구문 분석 의미한다 ..

    var myVar = ...some..code..here... ;
    

    하지만 그 JSON의 유일한 제한되지 않습니다. JSON에 대한 BNF 언어 사양은 매우 간단합니다. 예를 들어, (자바 스크립트와 펄 할 같은) 문자열을 표시하기 위해 작은 따옴표의 사용을 허용하지 않습니다 그것은 (않습니다 'C'와 같은) 바이트로 한 문자를 표현하는 방법이 없습니다. 불행하게도, 그것은 또한 (구성 파일을 만들 때 정말 좋은 것) 주석을 허용하지 않습니다. 모든 제한 거꾸로 JSON을 구문 분석 빠르고 이벤트 코드 주입 (보안 위협)에 대한 기회가 없다는 것입니다.

    이러한 제한으로 인해, JSON은 괄호에 대한 사용이 없습니다. 따라서, JSON 문자열에 괄호는 잘못된 문자입니다.

    항상 다음과 같은 이유로, 아약스와 JSON 형식을 사용합니다 :

    아약스 파이프 라인의 예를 들어, 노드 서버와 jQuery를 클라이언트를 포함하는 프로그램을 고려하십시오. 클라이언트 프로그램의 형식은 $의 아약스 ({. dataType와 'JSON'을, ... 등})을 갖는 jQuery를 호출을 사용하여 ;. JQuery와는 추후 사용하고 패키지의 jqXHR 객체를 생성 및 연관된 요청을 송신한다. 서버는이를 처리, 요청을 수락하고 응답 할 준비가되어 있습니다. 서버 프로그램은 패키지 메소드 res.json (데이터)를 호출하고 응답을 보냅니다. 위로 클라이언트 측에서, jQuery를가 응답을 받아 관련 jqXHR 객체를 협의하고, JSON 데이터를 포맷 처리합니다. 이 모든 수동으로 데이터를 변환 할 필요없이 작동합니다. 응답은 노드 서버 JSON.stringify ()를 명시 적으로 호출하고, 클라이언트에 JSON.parse ()없이 명시 적으로 호출을 포함하지 않습니다; 그게 다 당신을 위해 처리합니다.

    "평가"의 사용은 코드 주입 보안 위험과 연관되어 있습니다. 당신은 일어날 수있는 방법이 없다 생각하지만, 해커는 매우 창조적 얻을 수 있습니다. 또한, "평가는"자바 스크립트 최적화를위한 문제가있다.

    당신이 사용하는 자신을 발견 할 경우 "캐릭터 라인 화 ()"함수를 사용하여는, 그 이름을 가진 일부 기능이 "평가"를하지 JSON와 호환되는 문자열을 작성된다는 점에 유의. 예를 들어, 노드에서, 다음은 그 "평가"호환 형식의 문자열을 생성 기능을 제공합니다 :

    var stringify = require('node-stringify'); // generates eval() format
    

    이 유용 할 수 있지만, 특정 필요가 없다면, 그것은 당신이 원하는 아마 아니다.


  12. 12.배열의 작품을 반환하고, 당신은 또한 하나의 객체를 포함하는 배열로 단일 개체를 반환하려고 할 수없는 단일 개체를 반환하는 경우 :

    배열의 작품을 반환하고, 당신은 또한 하나의 객체를 포함하는 배열로 단일 개체를 반환하려고 할 수없는 단일 개체를 반환하는 경우 :

    [ { title: "One", key: "1" } ]
    

    방법 일관된 데이터 구조, 객체의 배열을 반환하는 것을, 아니 데이터 페이로드를 중요.

    난 당신이 "괄호"에서 단일 개체를 포장 시도한 것을 볼, 때문에 물론 자바 스크립트 취급의 예와이 제안 [..] 다른 것보다 (..)


  13. 13.jQuery의 오류 처리기가 호출되고 XHR 객체가 "파서 오류"가 포함되는 경우, 그것은 아마 서버에서 해석 에러가 나오는 돌아왔다.

    jQuery의 오류 처리기가 호출되고 XHR 객체가 "파서 오류"가 포함되는 경우, 그것은 아마 서버에서 해석 에러가 나오는 돌아왔다.

    당신은 매개 변수없이 서비스를 호출,하지만 당신은 하나의 레코드를 검색하는 매개 변수를 제공 할 때 그것을 깨고 때 여러 결과 시나리오는?

    백엔드 무엇에서이 반환된다?

    ASMX 서비스에, 예를 들어,이 매개 변수는 JSON 객체 대신 JSON 문자열로 jQuery를 공급하는 경우가 종종 있습니다. 당신은 "데이터"매개 변수에 jQuery를에게 실제 JSON 객체를 제공하는 경우, 그것은 JSON으로 보내는 대신, 표준 및 구분 K로 V 쌍을 그 직렬화됩니다.


  14. 14.내가 추가 한 나의 구현의 일부에서 발견 :

    내가 추가 한 나의 구현의 일부에서 발견 :

    obj = new Object; obj = (data.obj);
    

    이는 문제를 해결하는 것 같았다. 평가 여부는 나를 위해 동일을 할 것 같았다.


  15. 15.jQuery를 특정 JSON 키에 질식. 나는 PHP이 JSON 조각을 전송했다 :

    jQuery를 특정 JSON 키에 질식. 나는 PHP이 JSON 조각을 전송했다 :

    echo json_encode((object) array('result' => 'success'));
    

    뭔가 다른 작품에 '결과'키를 이름 바꾸기. 나는 이것이 어떤 종류의 예약어 충돌, 그리고 jQuery를 버그 (1.4.2)이 될 수도 있겠죠 것입니다.


  16. 16.는 ColdFusion 환경에서, 심지어 잘 형성 JSON으로, 오류가 발생합니다 한 가지, (디버깅 및 로깅> 디버그 출력 설정 아래)는 ColdFusion Administrator에서 켜져 출력을 디버깅 요청을 활성화 가지고있다. 디버깅 정보는 JSON 데이터로 반환됩니다 따라서 그것을 유효 할 것입니다.

    는 ColdFusion 환경에서, 심지어 잘 형성 JSON으로, 오류가 발생합니다 한 가지, (디버깅 및 로깅> 디버그 출력 설정 아래)는 ColdFusion Administrator에서 켜져 출력을 디버깅 요청을 활성화 가지고있다. 디버깅 정보는 JSON 데이터로 반환됩니다 따라서 그것을 유효 할 것입니다.


  17. 17.이 시도

    이 시도

    $.ajax({
        url: url,
        data:datas,
        success:function(datas, textStatus, jqXHR){
        var returnedData = jQuery.parseJSON(datas.substr(datas.indexOf('{')));
    })};
    

    '{'이전에 알 수없는 문자 내 경우 서버 응답에서


  18. 18.나는 상태 = parseerror 및 xhr.status = 200를 얻고 있었다.

    나는 상태 = parseerror 및 xhr.status = 200를 얻고 있었다.

    나에 대한 문제는 URL의 JSON 응답 안에이 고정 '/'로 전환 '\'했다이었다.


  19. 19.나는이 고민, 나는 데이터 오브젝트를 보여주기 위해 불을 지르고를 사용 할 때까지,이 밖으로 내려고 몇 시간을 보냈다.

    나는이 고민, 나는 데이터 오브젝트를 보여주기 위해 불을 지르고를 사용 할 때까지,이 밖으로 내려고 몇 시간을 보냈다.

    var data = eval("(" + data.responseText + ")");
    console.log(data.count);
    

  20. 20.사용하다

    사용하다

    $data = yourarray(); 
    json_encode($data)
    

    서버 측에서. 클라이언트 측에서 데이터 유형 JSON과 AJAX를 사용하고있을 것은 확실 문서 인코딩은 UTF-8이어야 BOM와 UTF-8이 아닙니다.

  21. from https://stackoverflow.com/questions/249692/jquery-wont-parse-my-json-from-ajax-query by cc-by-sa and MIT license