복붙노트

[JQUERY] JQuery와는 - 어떻게 $ .post () 사용의 contentType = 응용 프로그램 / JSON을 만드는 방법?

JQUERY

JQuery와는 - 어떻게 $ .post () 사용의 contentType = 응용 프로그램 / JSON을 만드는 방법?

해결법


  1. 1.나는 당신이있을 수 있습니다 생각

    나는 당신이있을 수 있습니다 생각

    정말 $ 아약스 호출 구성된 전 단지 바로 가기 같이 .post 항상 $ 만들 JSON 데이터 형식을 사용하는 소스를 1.Modify

    또는

    사용하려는 $ 아약스 구성에 대한 바로 가기입니다 2.Define은 자신의 유틸리티 함수

    또는

    3.You는 원숭이 패치를 통해 자신의 구현으로 $ .post 기능을 덮어 쓸 수 있습니다.

    당신의 예에서 JSON 데이터 형식은 서버가 아닌 서버에 전송 형식에서 반환 된 데이터 유형을 의미합니다.


  2. 2.

    $.ajax({
      url:url,
      type:"POST",
      data:data,
      contentType:"application/json; charset=utf-8",
      dataType:"json",
      success: function(){
        ...
      }
    })
    

    참조 : jQuery.ajax ()


  3. 3.마지막으로 나를 위해 작동하는 솔루션을 발견 :

    마지막으로 나를 위해 작동하는 솔루션을 발견 :

    jQuery.ajax ({
        url: myurl,
        type: "POST",
        data: JSON.stringify({data:"test"}),
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        success: function(){
            //
        }
    });
    

  4. 4.내 스크립트에서 jQuery를에 다음과 같은 방법을 추가 결국 :

    내 스크립트에서 jQuery를에 다음과 같은 방법을 추가 결국 :

    jQuery["postJSON"] = function( url, data, callback ) {
        // shift arguments if data argument was omitted
        if ( jQuery.isFunction( data ) ) {
            callback = data;
            data = undefined;
        }
    
        return jQuery.ajax({
            url: url,
            type: "POST",
            contentType:"application/json; charset=utf-8",
            dataType: "json",
            data: data,
            success: callback
        });
    };
    

    그리고 그것을 사용하기

    $.postJSON('http://url', {data: 'goes', here: 'yey'}, function (data, status, xhr) {
        alert('Nailed it!')
    });
    

    이것은 단순히 "GET"원래 JQuery와 소스에서 "포스트"의 코드를 복사하고 JSON POST를 강제로 몇 가지 매개 변수를 하드 코딩에 의해 수행되었다.

    감사!


  5. 5.단지 사용

    단지 사용

    jQuery.ajax ({
        url: myurl,
        type: "POST",
        data: mydata,
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        success: function(){
            //
        }
    });
    

    @JK 업데이트 : 당신이 대답 한 해당 예를 찾을 수 .post 당신은 $에 하나의 코드 예제 질문에 작성하는 경우. 나는 당신이 이미 알고까지 공부 동일한 정보를 반복하지 않으 : $ 아약스의 짧은 형태가 $ .post와 $ 갔지. 그러니 그냥 $ 아약스를 사용하고는 전역 설정을 변경하지 않고 그것의 매개 변수의 전체 세트를 사용할 수 있습니다.

    그런데 나는 표준 $의 .post을 덮어 권하고 싶지 않다. 그것은 내 개인적인 의견이지만, 저 것이 중요뿐만 아니라 프로그램의 작품뿐만 아니라, 프로그램을 읽는 모든 사람이 같은 방법으로 그것을 이해하고있다. 매우 중요한 이유없이 표준 방법을 덮어 쓰면 프로그램 코드의 읽기에 오해에 따를 수 있습니다. 내가 추천 한 번 더 반복 그래서 : 그냥 jQuery를 대신 jQuery.get 및 jQuery.post을 형성 아약스 원래의 $를 사용하고는 완벽하게 작동뿐만 아니라 프로그램을받을 수 있지만 오해없이 사람들이 읽을 수 있습니다.


  6. 6.당신은 포스트 () 마지막 매개 변수로 전달할 수 있다는 "JSON"데이터 유형은 요청에 보내는 것 입력하지 어떤 함수가 서버의 응답에서 예상되는 데이터의 유형을 나타냅니다. 구체적으로는 "동의"헤더를 설정합니다.

    당신은 포스트 () 마지막 매개 변수로 전달할 수 있다는 "JSON"데이터 유형은 요청에 보내는 것 입력하지 어떤 함수가 서버의 응답에서 예상되는 데이터의 유형을 나타냅니다. 구체적으로는 "동의"헤더를 설정합니다.

    솔직히 가장 좋은 건 아약스 () 호출로 전환하는 것입니다. 포스트 () 함수의 편의를 의미한다; 그냥 간단한 양식 게시를 수행 할 때의 아약스 () 호출의 단순화 된 버전. 당신은하지 않습니다.

    당신이 정말로 스위치에 원하지 않는 경우, 당신은 (), 자신의 기능을 말하자면,라는 xpost을하고, 단순히 콘텐츠 형식 세트, JQuery와 아약스 () 호출에 대한 매개 변수로 지정된 파라미터를 변환있을 수 있습니다. 그런 식으로, 아약스에 오히려 그 게시물을 모두 다시 작성하는 것보다 () 함수 () 함수, 당신은 단지 xpost (또는 무엇이든)에 게시물에서 그들 모두를 변경해야합니다.


  7. 7.(에서 : https://benjamin-schweizer.de/jquerypostjson.html)이 간단한 JQuery와 API의 확장자 $ .postJSON에 대한 ()는 트릭을 수행합니다. 당신은 다른 모든 기본 JQuery와 Ajax 호출처럼 () postJSON를 사용할 수 있습니다. 당신은 이벤트 핸들러 등을 첨부 할 수 있습니다.

    (에서 : https://benjamin-schweizer.de/jquerypostjson.html)이 간단한 JQuery와 API의 확장자 $ .postJSON에 대한 ()는 트릭을 수행합니다. 당신은 다른 모든 기본 JQuery와 Ajax 호출처럼 () postJSON를 사용할 수 있습니다. 당신은 이벤트 핸들러 등을 첨부 할 수 있습니다.

    $.postJSON = function(url, data, callback) {
      return jQuery.ajax({
        'type': 'POST',
        'url': url,
        'contentType': 'application/json; charset=utf-8',
        'data': JSON.stringify(data),
        'dataType': 'json',
        'success': callback
      });
    };
    

    ($ HTTP AngularJS와에서 같은) 다른 아약스 API를 같이 그것은 응용 프로그램 / JSON에 대한 올바른 ContentType을 설정합니다. 이 여기에도 캐릭터 라인 도착하기 때문에 당신은 직접 JSON 데이터 (자바 스크립트 객체)를 전달할 수 있습니다. 예상 반환 dataType와는 JSON으로 설정됩니다. 당신은 예를 들어, 약속에 대한 jQuery의 기본 이벤트 핸들러를 첨부 할 수 있습니다 :

    $.postJSON(apiURL, jsonData)
     .fail(function(res) {
       console.error(res.responseText);
     })
     .always(function() {
       console.log("FINISHED ajax post, hide the loading throbber");
     });
    

  8. 8.나는 그것 등 MVC뿐만 아니라 ASMX와 함께 작동 .. 실제로 내가 서비스를 기반으로 MS에서 /로 읽기 / 포스팅에 사용하는 바로 가기 방법을 가지고,이 늦은 답변을 알고 ...

    나는 그것 등 MVC뿐만 아니라 ASMX와 함께 작동 .. 실제로 내가 서비스를 기반으로 MS에서 /로 읽기 / 포스팅에 사용하는 바로 가기 방법을 가지고,이 늦은 답변을 알고 ...

    사용하다:

    $.msajax(
      '/services/someservice.asmx/SomeMethod'
      ,{}  /*empty object for nothing, or object to send as Application/JSON */
      ,function(data,jqXHR) {
        //use the data from the response.
      }
      ,function(err,jqXHR) {
        //additional error handling.
      }
    );
    //sends a json request to an ASMX or WCF service configured to reply to JSON requests.
    (function ($) {
      var tries = 0; //IE9 seems to error out the first ajax call sometimes... will retry up to 5 times
    
      $.msajax = function (url, data, onSuccess, onError) {
        return $.ajax({
          'type': "POST"
          , 'url': url
          , 'contentType': "application/json"
          , 'dataType': "json"
          , 'data': typeof data == "string" ? data : JSON.stringify(data || {})
          ,beforeSend: function(jqXHR) {
            jqXHR.setRequestHeader("X-MicrosoftAjax","Delta=true");
          }
          , 'complete': function(jqXHR, textStatus) {
            handleResponse(jqXHR, textStatus, onSuccess, onError, function(){
              setTimeout(function(){
                $.msajax(url, data, onSuccess, onError);
              }, 100 * tries); //try again
            });
          }
        });
      }
    
      $.msajax.defaultErrorMessage = "Error retreiving data.";
    
    
      function logError(err, errorHandler, jqXHR) {
        tries = 0; //reset counter - handling error response
    
        //normalize error message
        if (typeof err == "string") err = { 'Message': err };
    
        if (console && console.debug && console.dir) {
          console.debug("ERROR processing jQuery.msajax request.");
          console.dir({ 'details': { 'error': err, 'jqXHR':jqXHR } });
        }
    
        try {
          errorHandler(err, jqXHR);
        } catch (e) {}
        return;
      }
    
    
      function handleResponse(jqXHR, textStatus, onSuccess, onError, onRetry) {
        var ret = null;
        var reterr = null;
        try {
          //error from jqXHR
          if (textStatus == "error") {
            var errmsg = $.msajax.defaultErrorMessage || "Error retreiving data.";
    
            //check for error response from the server
            if (jqXHR.status >= 300 && jqXHR.status < 600) {
              return logError( jqXHR.statusText || msg, onError, jqXHR);
            }
    
            if (tries++ < 5) return onRetry();
    
            return logError( msg, onError, jqXHR);
          }
    
          //not an error response, reset try counter
          tries = 0;
    
          //check for a redirect from server (usually authentication token expiration).
          if (jqXHR.responseText.indexOf("|pageRedirect||") > 0) {
            location.href = decodeURIComponent(jqXHR.responseText.split("|pageRedirect||")[1].split("|")[0]).split('?')[0];
            return;
          }
    
          //parse response using ajax enabled parser (if available)
          ret = ((JSON && JSON.parseAjax) || $.parseJSON)(jqXHR.responseText);
    
          //invalid response
          if (!ret) throw jqXHR.responseText;  
    
          // d property wrap as of .Net 3.5
          if (ret.d) ret = ret.d;
    
          //has an error
          reterr = (ret && (ret.error || ret.Error)) || null; //specifically returned an "error"
    
          if (ret && ret.ExceptionType) { //Microsoft Webservice Exception Response
            reterr = ret
          }
    
        } catch (err) {
          reterr = {
            'Message': $.msajax.defaultErrorMessage || "Error retreiving data."
            ,'debug': err
          }
        }
    
        //perform final logic outside try/catch, was catching error in onSuccess/onError callbacks
        if (reterr) {
          logError(reterr, onError, jqXHR);
          return;
        }
    
        onSuccess(ret, jqXHR);
      }
    
    } (jQuery));

    참고 : 나는 또한 MS "/Date(...)/"날짜를 처리 추가합니다 json.org의 JS 파일에서 수정 된 JSON.parseAjax 방법을 가지고 ...

    기본 파서 나누기 당신이 배열 및 / 또는 객체 등의 프로토 타입을 확장 인스턴스가 포함되지 않은 수정 된 json2.js 파일, 그것은, IE8의 경우 스크립트 기반 파서를 사용

    나는 약속 인터페이스를 구현하는이 코드를 개조 생각해 왔던, 그러나 그것은 나를 위해 정말 잘 작동합니다.


  9. 9.문제의 핵심해서 getJSON이 존재하고 올바른 일을하면서 글을 쓰는 시점에서 JQuery와는 postJSON 방법이없는 것이 사실이다.

    문제의 핵심해서 getJSON이 존재하고 올바른 일을하면서 글을 쓰는 시점에서 JQuery와는 postJSON 방법이없는 것이 사실이다.

    postJSON 방법은 다음을 수행합니다 :

    postJSON = function(url,data){
        return $.ajax({url:url,data:JSON.stringify(data),type:'POST', contentType:'application/json'});
    };
    

    이처럼 사용할 수 있습니다 :

    postJSON( 'path/to/server', my_JS_Object_or_Array )
        .done(function (data) {
            //do something useful with server returned data
            console.log(data);
        })
        .fail(function (response, status) {
            //handle error response
        })
        .always(function(){  
          //do something useful in either case
          //like remove the spinner
        });
    

  10. 10.3.0로, 당신은 $ 아약스 옵션을 사용할 수 있다는 것을 의미, 설정 개체를 받아 들일 것입니다 .post를 $ 것을 문서는 현재 보여줍니다. 3.0은 아직 발표되고 그들이 문서에 대한 참조를 숨기고에 대해 얘기하고 커밋 만에 미래에 그것을위한 봐!

    3.0로, 당신은 $ 아약스 옵션을 사용할 수 있다는 것을 의미, 설정 개체를 받아 들일 것입니다 .post를 $ 것을 문서는 현재 보여줍니다. 3.0은 아직 발표되고 그들이 문서에 대한 참조를 숨기고에 대해 얘기하고 커밋 만에 미래에 그것을위한 봐!


  11. 11.나는 다음과 같은 자바 스크립트 코드와 유사한 문제가 있었다 :

    나는 다음과 같은 자바 스크립트 코드와 유사한 문제가 있었다 :

    var url = 'http://my-host-name.com/api/Rating';
    
    var rating = { 
      value: 5,
      maxValue: 10
    };
    
    $.post(url, JSON.stringify(rating), showSavedNotification);
    

    어디 피들러 I에서와 요청을 볼 수 있었다 :

    그 결과, 내 서버는 서버 측 형식으로 객체를 매핑 할 수 있습니다.

    이것에 마지막 줄을 변경 한 후 :

    $.post(url, rating, showSavedNotification);
    

    피들러에서 나는 여전히 볼 수 있습니다 :

    그러나 서버는 내가 기대했던 복귀하기 시작했다.


  12. 12.뭔지 맞춰봐? @BenCreasy 완전히 옳았다!

    뭔지 맞춰봐? @BenCreasy 완전히 옳았다!

    jQuery를 버전 1.12.0를 시작하면 우리는이 작업을 수행 할 수 있습니다

    $.post({
        url: yourURL,
        data: yourData,
        contentType: 'application/json; charset=utf-8'
    })
        .done(function (response) {
            //Do something on success response...
        });
    

    난 그냥 그것을 테스트하고 일했다!


  13. 13.어떻게 자신의 어댑터 / 래퍼는?

    어떻게 자신의 어댑터 / 래퍼는?

    //adapter.js
    var adapter = (function() {
    
    return {
    
        post: function (url, params) {
            adapter.ajax(url, "post", params);
            },
        get: function (url, params) {
            adapter.ajax(url, "get", params);
        },
        put: function (url, params) {
            adapter.ajax(url, "put", params);
        },
        delete: function (url, params) {
            adapter.ajax(url, "delete", params);
        },
        ajax: function (url, type, params) {
            var ajaxOptions = {
                type: type.toUpperCase(),
                url: url,
                success: function (data, status) {
                    var msgType = "";
                    // checkStatus here if you haven't include data.success = true in your
                    // response object
                    if ((params.checkStatus && status) || 
                       (data.success && data.success == true)) {
                                msgType = "success";
                                params.onSuccess && params.onSuccess(data);
                        } else {
                                msgType = "danger";
                                params.onError && params.onError(data);
                        }
                },
                error: function (xhr) {
                        params.onXHRError && params.onXHRError();
                        //api.showNotificationWindow(xhr.statusText, "danger");
                }
            };
            if (params.data) ajaxOptions.data = params.data;
            if (api.isJSON(params.data)) {
                ajaxOptions.contentType = "application/json; charset=utf-8";
                ajaxOptions.dataType = "json";
            }
            $.ajax($.extend(ajaxOptions, params.options));
        }
    })();
    
        //api.js
    var api = {
      return {
        isJSON: function (json) {
            try {
                var o = JSON.parse(json);
                if (o && typeof o === "object" && o !== null) return true;
            } catch (e) {}
            return false;
        }
      }
    })();
    

    그리고 매우 간단한 사용 :

    adapter.post("where/to/go", {
        data: JSON.stringify(params),
        onSuccess: function (data) {
            //on success response...
        }
        //, onError: function(data) {  //on error response... }
        //, onXHRError: function(xhr) {  //on XHR error response... }
    });
    

  14. 14.@Adrien 내 경우에는 작동하지 않았다 제안 어떤 이유로, 아약스 요청 내용 유형을 설정. 그러나 실제로 콘텐츠 형식 전에이 작업을 수행하여 .post $를 사용하여 변경할 수 있습니다 :

    @Adrien 내 경우에는 작동하지 않았다 제안 어떤 이유로, 아약스 요청 내용 유형을 설정. 그러나 실제로 콘텐츠 형식 전에이 작업을 수행하여 .post $를 사용하여 변경할 수 있습니다 :

    $.ajaxSetup({
        'beforeSend' : function(xhr) {
            xhr.overrideMimeType('application/json; charset=utf-8');
        },
    });
    

    그런 다음 $의 .post 통화를 :

    $.post(url, data, function(), "json")
    

    내가 jQuery를 + IIS에 문제가 있고,이 JQuery와 아약스 요청 창-1252 인코딩을 사용하도록 이해 도움이 유일한 해결책이었다.


  15. 15.우리는 $ .post이 같은 내용 유형을 변경할 수 있습니다

    우리는 $ .post이 같은 내용 유형을 변경할 수 있습니다

    .post $ (URL, 데이터, 기능 (데이터, 상태, XHR) { xhr.setRequestHeader ( "컨텐츠 타입"은 "은 application / x-www-form-urlencoded로는, 캐릭터 = UTF-8");});


  16. 16.당신이 (간 리소스 공유) 문제를 CORS이있는 경우 $ .post가 작동하지 않습니다. 다음과 같은 형식으로 $ 아약스를 사용해보십시오 : "$의 아약스 ({ URL : someurl, contentType의 '응용 프로그램 / JSON' 데이터 : requestInJSONFormat, 헤더 : { '액세스 제어 - 허용 - 원산지': '*'} dataType와 'JSON' 입력 : 'POST', 비동기 : 거짓, 성공 : 기능 (데이터) {...} }); "

    당신이 (간 리소스 공유) 문제를 CORS이있는 경우 $ .post가 작동하지 않습니다. 다음과 같은 형식으로 $ 아약스를 사용해보십시오 : "$의 아약스 ({ URL : someurl, contentType의 '응용 프로그램 / JSON' 데이터 : requestInJSONFormat, 헤더 : { '액세스 제어 - 허용 - 원산지': '*'} dataType와 'JSON' 입력 : 'POST', 비동기 : 거짓, 성공 : 기능 (데이터) {...} }); "


  17. 17.직접 응용 프로그램 / JSON을 보낼 수 없습니다 - 그것은 GET / POST 요청의 매개 변수이어야합니다.

    직접 응용 프로그램 / JSON을 보낼 수 없습니다 - 그것은 GET / POST 요청의 매개 변수이어야합니다.

    같은 그래서

    $.post(url, {json: "...json..."}, function());
    
  18. from https://stackoverflow.com/questions/2845459/jquery-how-to-make-post-use-contenttype-application-json by cc-by-sa and MIT license