#115139: Add centralized json handler (and send text/javascript content-type header).

6.x
Steven Wittens 2007-06-22 08:46:16 +00:00
parent fe8b35f527
commit 569ede574f
5 changed files with 29 additions and 9 deletions

View File

@ -2122,6 +2122,24 @@ function drupal_to_js($var) {
}
}
/**
* Return data in JSON format.
*
* This function should be used for JavaScript callback functions returning
* data in JSON format. It sets the header for JavaScript output.
*
* @param $var
* (optional) If set, the variable will be converted to JSON and output.
*/
function drupal_json($var = NULL) {
// We are returning JavaScript, so tell the browser.
drupal_set_header('Content-Type: text/javascript; charset=utf-8');
if (isset($var)) {
echo drupal_to_js($var);
}
}
/**
* Wrapper around urlencode() which avoids Apache quirks.
*

View File

@ -742,16 +742,15 @@ function profile_form_profile($edit, $user, $category, $register = FALSE) {
* Callback to allow autocomplete of profile text fields.
*/
function profile_autocomplete($field, $string) {
$matches = array();
if (db_result(db_query("SELECT COUNT(*) FROM {profile_fields} WHERE fid = %d AND autocomplete = 1", $field))) {
$matches = array();
$result = db_query_range("SELECT value FROM {profile_values} WHERE fid = %d AND LOWER(value) LIKE LOWER('%s%%') GROUP BY value ORDER BY value ASC", $field, $string, 0, 10);
while ($data = db_fetch_object($result)) {
$matches[$data->value] = check_plain($data->value);
}
print drupal_to_js($matches);
}
exit();
drupal_json($matches);
}
/**

View File

@ -1506,12 +1506,12 @@ function taxonomy_autocomplete($vid, $string = '') {
// Fetch last tag
$last_string = trim(array_pop($array));
$matches = array();
if ($last_string != '') {
$result = db_query_range(db_rewrite_sql("SELECT t.tid, t.name FROM {term_data} t WHERE t.vid = %d AND LOWER(t.name) LIKE LOWER('%%%s%%')", 't', 'tid'), $vid, $last_string, 0, 10);
$prefix = count($array) ? implode(', ', $array) .', ' : '';
$matches = array();
while ($tag = db_fetch_object($result)) {
$n = $tag->name;
// Commas and quotes in terms are special cases, so encode 'em.
@ -1520,9 +1520,9 @@ function taxonomy_autocomplete($vid, $string = '') {
}
$matches[$prefix . $n] = check_plain($tag->name);
}
print drupal_to_js($matches);
exit();
}
drupal_json($matches);
}
/**

View File

@ -741,7 +741,10 @@ function upload_js() {
// @todo: Put status messages inside wrapper, instead of above so they do not
// persist across ajax reloads.
$output = theme('status_messages') . drupal_render($form);
// We send the updated file attachments form.
// Don't call drupal_json(). upload.js uses an iframe and
// the header output by drupal_json() causes problems in some browsers.
print drupal_to_js(array('status' => TRUE, 'data' => $output));
exit;
}

View File

@ -2827,8 +2827,8 @@ function user_autocomplete($string = '') {
$matches[$user->name] = check_plain($user->name);
}
}
print drupal_to_js($matches);
exit();
drupal_json($matches);
}
/**