jQuery AJAX 200状态,但神秘的语法错误

I have a status 200 being returned when I'm using jQuery AJAX. However, I am also getting a syntax error from somewhere. I am posting to PHP like this:

function submit_order(orderInformation) {
    $.ajax({
        type: 'post',
        url: 'queries/submit_order.php?<?=time();?>',
        data: 'orderInformation=' + JSON.stringify(orderInformation),
        dataType: 'json',
        success: function (returnedData) {
            console.log(returnedData);
            $('#content_container').fadeOut(340, function () {
                var new_content = $('#content_container').clone(false);
                $('#content_container').remove();
                new_content.css('display', 'none');
                new_content.children().remove();

                new_content.appendTo('body');
                $('#content_container').vkTemplate('templates/confirm_template.tmpl?<?=time()?>', returnedData, function (el, data, context) {
                console.log('success'); 

                    $('#content_container').fadeIn(340);
                });
            });
        },
      error: function (xhr, ajaxOptions, thrownError) {
        console.log(xhr.status);
        console.log(thrownError);
      }
    });
}

My PHP code is pretty straightforward:

$order_information = json_decode($json_str, true);

//go through the array and make an email out of it
//add a few elements to the array
//send the email

//send back a json string with the added elements
echo json_encode($order_information);

Yet I get this:

error screenshot

And oddly, if I copy paste the JSON string from console.log(JSON.stringify(orderInformation)) into the PHP page:

$json_str = '{"sector_0":{"file":[],"sector_info":{"sector_label":"NIO","purchase_order":"test","proof":false},"lines":{"line_0":{"description":"test","quantity":"2","productId":"1","addressId":"20","shipViaId":"1","notes":false}}}} ';

everything works. What is this error? Where could this < seen in the error be coming from?

Thanks

It is your error handler that gets fired and logs:

  • xhr.status (200)
  • thrownError (the syntax error)

Note that $.ajax with dataType: json will fire the error handler even if the server returns 200 OK but the response is invalid JSON. The syntax error is not in your JavaScript code but in the JSON. Identify where the < is coming from and make sure that your PHP script is sending valid JSON.

Tip: open the console and look at the network tab; all XHRs are logged there along with headers and body.

200 - Is an Ok response by a server http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

You have a syntax error in your response server returns invalid json

As your PHP code seams fine, there must be something else. Syntax error or your framework returns json wrapped in html ...

Use proper tools to see what is returned by server. (firebug on firefox/ developer tools on chrome)

In your image you see 0: "<" That means that returned string starts with < - That means it is html that got returned.

Looks like you use chrome. Go to your "network" tab in chrome an you should be able to see raw response for your request.

so it is a php error:

$sector_index is not itarable. Can you var_dump it to see. what it is?

It looks like <?=time()?> isn't getting processed. Alert the URL before you post to it for verification.