开发者

Cant Post JSON Object using Jquery.post()

开发者 https://www.devze.com 2023-01-19 05:55 出处:网络
I have the following object that gets created in my javascript application. poll_data[active_question] = {

I have the following object that gets created in my javascript application.

    poll_data[active_question] = {
        'question': $('div.question_wrap textarea').attr('value'),
        'answers':  [
            $('div.answer_wrap input#0').attr('value'),
            $('div.answer_wrap input#1').attr('value'),
            $('div.answer_wrap input#2').attr('value'),
            $('div.answer_wrap input#3').attr('value'),
            $('div.answer_wrap input#4').attr('value'),
            $('div.answer_wrap input#5').attr('value')
        ]
    };

active_question is set to 'poll', 0, 1, 2, 3, 4, or 5 depending on the question being worked on at the moment. I am trying to post this object to a php script using the following JS code.

    $.ajax({
        url:            '/somewebsite/poll/create?json=show',
        type:           'POST',
        // dataType:     开发者_运维知识库   'json',
        data:           poll_data,
        contentType:        'application/json; charset=utf-8',
        success:        function(data) {
            alert(data);
        }
    });

My PHP code is very simple.

    echo json_encode($_POST); exit;

When I run the script and click the button that triggers the submission of the data, I receive the alert (so the actual ajax code works), but the result from my PHP script is just an empty array. I think that this is an issue with the way the object is constructed, but I am not sure, and have not been able to find a work around.

Thanks in advance.


Okay, a few things:

poll_data is not a valid JSON object. You would have to use poll_data[active_question], which IS a valid JSON object. jQuery should serialize this correctly. Remove the contentType -- I am pretty sure that is for php (not positive) but your code wouldn't work for me until I removed it. Finally, the appending of json=show to the query string doesn't do anything..it will just be ignored.

A couple minor things too: you can use .val() instead of .attr('value'), and have you looked into .serialize() to create your post data for you?


do this on server

$data;
$data->question=$_POST['question']
$data->answer=$_POST['answers']
echo json_encode($data);

do this for ajax request

 $.ajax({
        url: '/somewebsite/poll/create?json=show',
        type:'POST',
        //modified data proprty
        data:poll_data[active_question],
        success: function(data) {
            alert(data);
        }
    });
0

精彩评论

暂无评论...
验证码 换一张
取 消