1

私はjQueryとJavascriptの初心者です..

助けが要る。PHPスクリプトにヒットするAJAXリクエストがあります。データが検証されると、php は JSON を返します。エラーが発生した場合は、エラー テキストを含む html 文字列を返します (必要に応じてこれを json 応答に変更できますが、今のところ html として満足しています...)

私が抱えている問題は、json 応答を識別し、JS で後続の if else ステートメントをコーディングして、次に何をすべきかを判断する方法です。

submitHandler: function(form) {
    $.post( window.location, $("#checkoutCustomer").serialize(), function(data) {
        // TODO: get this to respond to json response or html...
        // need something here to detect presence of JSON in the post response  
        $('#checkoutCustomerResults').html(data); // the html response case
        $(".continue_checkout_link").show(); // the json repsonse case
    });
}

理想的には、成功シナリオ (JSON) では、応答によってページがトリガーされ、ブラウザーに新しい URL が読み込まれる必要があります。

4

3 に答える 3

2
submitHandler: function(form) {
$.post( window.location, $("#checkoutCustomer").serialize(), function(data) {
    if(typeof data === 'string')
        $('#checkoutCustomerResults').html(data);
    else if(typeof data === 'object')
       $(".continue_checkout_link").show();
    else
        alert('Something else');
});
}
于 2012-05-28T06:31:01.443 に答える
1

個人的には、jQuery の機能を使用して、特定のステータス コードの特定のハンドラーを呼び出したいと思います。もちろん、それにはサーバーが適切に動作し、実際にステータスhttpステータスコードを正しく使用する必要があります。200 OK失敗しても返さない

次に、このようなことをします

$.ajax({
   url:"enpoint of service",
   dataType: "json",
   statusCode: {
   200: function(data) {
      //handle success
    },
    500: funciton(){
        //handle internal server error
    }
  }
});

または、完了したjqXHRオブジェクトを使用して失敗する可能性があります

$.ajax({
       url:"enpoint of service",
       dataType: "json"
    }).done(function(data){
       //handle success here
    }).fail(function(){
       //handle error here
    }).always(function(){
       //ecuted regardless of success or failure
    });
于 2012-05-28T06:20:37.223 に答える
1

私は最近、同様の要件に出くわしました。私の最終的な解決策は、すべての応答を JSON にすることでした。すべての回答にはstatus共通のパラメーターがあります。は、、またはstatusの値を取ることができ、残りのプロパティは の値に従って設定されます。たとえば ifの場合、リダイレクト先の URL を含む別のパラメーターが呼び出されると予想できます。次に、呼び出されるパラメーターを期待できます(私の場合、すべてのエラーフィールドを含むJSONがさらに含まれていますが、あなたの場合はHTMLをそこに入れることができます)successerrorredirectstatusstatus == 'redirect'redirectstatus == 'error'errors

ここで編集して、明確にするためのコードをいくつか示します。

submitHandler: function(form) {
  $.post(window.location, $('#checkoutCustomer').serialize(), function(data) {
    if (data.status == 'redirect') {
      window.location = data.redirect;
      return;
    }
    else if (data.status == 'error') {
      // data.errors will contain some HTML you set on the server side
      // display it however you like
    }
    else if (data.status == 'success') {
      // do whatever you want on success
    }
    else {
      // handle unknown status, should never happen
    }
  }, 'json');
}

最後の に注意してください'json'。これは の 4 番目のパラメータ$.postであり、JSON を応答として期待するよう jQuery に指示します。このようにdataして、コールバックのパラメーターには、既に解析された JSON 応答が単純なオブジェクトとして含まれます。

于 2012-05-28T06:03:48.950 に答える