2009-08-27 2 views
4

Есть ли что-то особенное, что мне нужно сделать для объекта JSON, прежде чем отправить его с помощью AJAX? Мой код выглядит следующим образом:Отправить JSON с AJAX

runAjax(JSON.stringify(data)); 

}

function runAjax(JSONstring) 
{ 
    ajax = getHTTPObject(); 
    var params = "?data=" + JSONstring; 
    ajax.open("POST", "createtrip.php", true); 
    ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    ajax.setRequestHeader("Content-length", params.length); 
    ajax.setRequestHeader("Connection", "close"); 
    ajax.onreadystatechange = serverSpeaks; 
    ajax.send(params); 
} 

Сейчас сервер не получает данные. Я получаю null на стороне сервера, но установлена ​​клиентская сторона JSONString. Есть ли что-то, что я делаю неправильно?

+0

вы можете проверить с Firebug, если у вас есть ошибки или звоните на сервер –

ответ

5

Вы отправляете данные через POST, вам не нужен '?' характер в начале переменной params, и я рекомендую вам encode в JSONString, чтобы избежать проблемы.

Обратите внимание, что вам не хватает var заявление для переменной ajax, это объявить глобально (window.ajax), и я думаю, что вам не нужно глобально ...

function runAjax(JSONstring) { 
    var params = "data=" + encodeURIComponent(JSONstring), 
     ajax = getHTTPObject(); 

    ajax.open("POST", "createtrip.php", true); 
    ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    ajax.setRequestHeader("Content-length", params.length); 
    ajax.setRequestHeader("Connection", "close"); 
    ajax.onreadystatechange = serverSpeaks; 
    ajax.send(params); 
} 
+0

мой вар утверждение в начале файла, как Я использую, если для других вещей. – Dan

+0

Я знаю, что это примерно три года после факта ... но в области JavaScript применительно к функции. Таким образом, использование CMS 'var' вполне уместно. Просто хотел указать на всех, кто мог бы задаться вопросом, почему он был там. Область действия в JS немного отличается от других языков, к которым мы можем привыкнуть. – Tim

+0

Было бы лучше удалить эти две строки: ajax.setRequestHeader («Content-length», params.length); ajax.setRequestHeader («Соединение», «закрыть»); –

0

Вы должны пройти через датчик для правильной отправки данных. Конечно, сначала вам нужно будет увидеть, что переменная «данные» хорошо сформирована как «JSON».

lib to encode/decode

другая ссылка encode/decode

0

Сервер может иметь дело с почтовым телом, как name1 = значение & имя2 = значение2.

Если вы используете PHP, вы можете получить строку JSon по:

$data = file_get_contents("php://input"); 
+0

Но может ли он иметь дело с "? Data = value"? – seth

+0

Вы пытались контролировать HTTP-трафик с помощью firebug или wirehark? Они могут предоставить вам больше информации об этом запросе Ajax. –